C#从属性列表中创建对象列表

时间:2017-08-09 07:02:13

标签: c# linq

我试图尽量减少这种情况。

List<ClassB> foo(List<ClassA> listA)
{
    var listB = new List<ClassB>();
    foreach (var item in listA)
        listB.Add(new ClassB(item, "stuff"));

    return listB;
}

有什么方法可以使用LINQ最小化这个?我想最小化这个,因为在我的代码库中有大量的转换,并且泛型不能处理要转换的各种类的怪癖。

3 个答案:

答案 0 :(得分:3)

你可以在select语句中做很多事情,包括从你拥有的对象构建新对象:

List<ClassB> foo(List<ClassA> listA)
{
    return lisA.Select(row => new ClassB(row, "stuff").ToList();
}

答案 1 :(得分:3)

Select方法就是您所需要的。它基本上做的是将可枚举中的每个元素转换为其他元素。在这种情况下,您要将所有ClassA转换为ClassB

Select的参数是一个采用ClassA实例并返回ClassB的方法。在这种情况下,方法如下所示:

ClassB MyMethod(ClassA obj) {
    return new ClassB(obj, "stuff");
}

这可以用lambda表达式编写:

obj => new ClassB(obj, "stuff")

您将此传递给Select,致电ToListIEnumerable变为List<ClassB>并完成!

List<ClassB> foo(List<ClassA> listA)
{
    return listA.Select(obj => new ClassB(obj, "stuff")).ToList();
}

答案 2 :(得分:3)

您可以使用LINQ将listA的元素投影到ClassB inances:

listA.Select(a => new ClassB(a, "stuff")).ToList()