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

本文关键字:列表 返回 调用 优化 方法 一个 | 更新日期: 2023-09-27 17:59:58

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

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分配给隐式类型的变量

如何优化上述代码?

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

根据此MSDN页面,ForEach方法返回void。这就是你犯错误的原因。

如果你想把上面的代码转换成一行代码,你可以使用:

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

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

此外,顺便说一句,这里并没有进行太多优化:从性能角度来看,两种方法都应该花费相同的时间。它更倾向于可读性。

性能应该是相同的,因为在这两种方式中,执行的操作数量相同(即ReturnAsEnumerableOf_MyClass()乘以someList的长度的操作数量),所以不应该有任何差异。