我试图尽量减少这种情况。
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最小化这个?我想最小化这个,因为在我的代码库中有大量的转换,并且泛型不能处理要转换的各种类的怪癖。
答案 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
,致电ToList
将IEnumerable
变为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()