单个对象上的C#数据转换

时间:2019-05-22 15:11:37

标签: c# linq lambda

我想知道是否有一种方法可以像使用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 个答案:

答案 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 });