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

时间:2015-06-27 16:17:55

标签: c# .net linq

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

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

foreach (var i in someList)
{
   lst.AddRange(obj.ReturnsAnEnumerableOf_MyClass(i.someId));
}

我不确定在AddRange方法中调用方法是否是个好主意。 所以,我想使用类似下面的代码来优化它:

 var j = someList.ForEach(i => obj.ReturnsAnEnumerableOf_MyClass(i.someId));

但是,通过执行上面的一个班轮代码,我得到了以下错误:

  

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

如何优化上述代码?

1 个答案:

答案 0 :(得分:1)

根据this MSDN页面,ForEach方法返回void。这就是导致错误的原因。

如果您想将上述代码转换为单行代码,可以使用:

var j = someList.SelectMany(i => obj.ReturnsAnEnumerableOf_MyClass(i.someId)).ToList();

j将是List<T>个实例,其中T是列表ReturnsAnEnumerableOf_MyClass返回的类型。

另外,作为旁注,这里没有进行太多优化:性能方面,两种方式都需要同时进行。它更倾向于可读性。

性能应该是相同的,因为在两种方式中都会执行相同数量的操作(即ReturnAsEnumerableOf_MyClass()乘以someList的长度的操作数),因此不应该&没有任何区别。