我想知道是否有一种方法可以像使用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表达式实现。
答案 0 :(得分:3)
// 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 });