Преобразование данных в C # для одного объекта - PullRequest
2 голосов
/ 22 мая 2019

Я пытаюсь спросить, есть ли способ преобразовать результат метода в новый объект в одну строку, как это возможно при использовании выражений List, Linq и Lambda.

Пример использования списков:

List<int> ints = GetListOfInts();
List<anotherClass> = ints.Select(x => new anotherClass(){ memberVariable = x }).ToList();

Благодаря этому я могу сопоставить список типа A списку типа B.

Я хочу сделать это для одного объекта, а не для списка.Вот что я намереваюсь:

// GetObjectA returns an instance of ObjectA
ObjectA objectA = GetObjectA();

// Here, GetOjbectA's result is mapped to an instance of ObjectB
ObjectB objectB = (GetObjectA() x => new ObjectB(){ memberVariable = x });

Это просто псевдокод, и я знаю, что он не будет компилироваться или работать.Возможно ли в настоящее время преобразование такого типа в C #?

Я знаю, что могу использовать мапперы, пользовательские методы и т. Д., Но я хочу знать, возможно ли это с помощью выражений lamba, как со списками.

1 Ответ

3 голосов
/ 22 мая 2019
// GetObjectA returns an instance of ObjectA
ObjectA objectA = GetObjectA();

// Here, GetOjbectA's result is mapped to an instance of ObjectB
ObjectB objectB = new[]{ GetObjectA() }.Select(x => new ObjectB(){ memberVariable = x }).First();

Не красиво, но должно работать.

Однако, если это действительно тот конкретный код, вы можете просто сделать

ObjectB objectB = new ObjectB(){ memberVariable = GetObjectA() };

Если вы хотите, чтобы он хорошо инкапсулировался, вы можете написать что-то вроде этого:

public static class ObjectExtensions
{
    public static TOutput Transform<TInput, TOutput>(this TInput input, Func<TInput, TOutput> transform)
    {
        return transform(input);
    }
}

и используйте это так:

// GetObjectA returns an instance of ObjectA
ObjectA objectA = GetObjectA();

// Here, GetOjbectA's result is mapped to an instance of ObjectB
ObjectB objectB = GetObjectA().Transform(x => new ObjectB(){ memberVariable = x });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...