用linq替换foreach循环

TOP*_*KEK 11 c# linq

我试图替换代码

foreach (var discovery in mpwrapper.parser.Discoveries)
{
   solution.AddFile("Discoveries", discovery.DisplayStringName + ".mpx", discovery);
}
Run Code Online (Sandbox Code Playgroud)

使用以下linq表达式

mpwrapper.parser.Discoveries.Select(
                    s => solution.AddFile("Discoveries", s.DisplayStringName + ".mpx", s));
Run Code Online (Sandbox Code Playgroud)

但是得到了一个错误

无法从用法推断出方法'System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable,System.Func)'的类型参数.尝试显式指定类型参数.

如何将这个foreach循环转换为linq查询,我在IEnumerable集合中的每个对象上执行一个方法?

dot*_*ixx 16

我认为你需要的是ForEach方法;)

mpwrapper.parser.Discoveries.ToList().ForEach(s => { solution.AddFile("Discoveries", s.DisplayStringName + ".mpx", s); });
Run Code Online (Sandbox Code Playgroud)

  • 或者只是坚持使用`foreach`,这在IMO更清晰.请参阅http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx.请注意,如果不知道"发现"的类型,我们不知道这是否会编译... (17认同)

use*_*738 6

问题是Select需要返回一个值,而Linq也不是为了变异集合而设计的.将select视为对集合的转换,而不是每个项目的状态更改

也许foreach循环是最好的解决方案