C#优化调用方法并为列表中的每个项返回其值

C#优化调用方法并为列表中的每个项返回其值,c#,.net,linq,C#,.net,Linq,目前,我有一个项目列表,我想循环通过。对于每个项目编号,我想调用另一个方法并将其值返回到另一个列表。 以下是我实施的代码: List<SomeClass> lst = new List<SomeClass>(); foreach (var i in someList) { lst.AddRange(obj.ReturnsAnEnumerableOf_MyClass(i.someId)); } 但是,通过执行以上一个线性代码,我得到以下错误: 无法将void分配给

目前,我有一个项目列表,我想循环通过。对于每个项目编号,我想调用另一个方法并将其值返回到另一个列表。 以下是我实施的代码:

List<SomeClass> lst = new List<SomeClass>();

foreach (var i in someList)
{
   lst.AddRange(obj.ReturnsAnEnumerableOf_MyClass(i.someId));
}
但是,通过执行以上一个线性代码,我得到以下错误:

无法将void分配给隐式类型的变量

如何优化上述代码?

根据MSDN页面,
ForEach
方法返回
void
。这就是您得到错误的原因

如果要将上述代码转换为一行程序,可以使用:

var j = someList.SelectMany(i => obj.ReturnsAnEnumerableOf_MyClass(i.someId)).ToList();
j
将是一个
列表
实例,其中
T
是列表的类型
returnsEnumerableof_MyClass
返回

另外,作为一个补充,这里没有太多的优化:从性能角度看,两种方法都需要相同的时间。它更倾向于可读性


性能应该是相同的,因为在这两种方式中执行的操作量相同(即
ReturnAsEnumerableOf_MyClass()
乘以
someList
的长度的操作数),所以应该没有什么区别。

foreach快还是SelectMany快?只是一个后续问题。为什么在这里使用SelectMany而不是Select?您的方法,
ReturnsAnEnumerableOf_MyClass
返回一个
列表。
Select
方法将这些列表(为
someList
中的每个对象生成)聚合为列表列表列表(即
IEnumerable
)。另一方面,
SelectMany()
将这个列表集合扁平化为一个集合:
IEnumerable
。为什么人们来到这里对一个已经被接受的答案进行否决投票,却不提供理由?你不是真的在帮我!
var j = someList.SelectMany(i => obj.ReturnsAnEnumerableOf_MyClass(i.someId)).ToList();