在LINQ Select语句中返回true

时间:2018-02-28 15:25:06

标签: c# linq

我在一个我以前从未见过的旧项目中遇到过一些代码,让我对它的意图感到困惑。

updatables.Select(r =>
{
  // some operations are done here for each element in the list  
  return true;
}).ToArray();

似乎正在使用select语句来迭代updatables集合。 ToArray调用似乎也没有做任何事情。

我的问题是,如果有的话,Select语句中的调用return true会完成什么?

2 个答案:

答案 0 :(得分:3)

这看起来非常像模仿ForEach的黑客:

    添加了
  • ToArray()来确保updatables将迭代完成,
  • 添加了
  • return true以使不允许Action<T>的编译器静音,但在LINQ Func<T,bool>中允许Select

我强烈建议不要编写这样的代码,因为它的可读性远低于等效的foreach循环。

答案 1 :(得分:1)

Select需要Func<T, TResult> - 这意味着它不会接受Action<T>。换句话说,一个不返回任何内容的lambda在传递给Select时会导致编译错误,因此作者绕过了#34;限制&#34;让它返回一个虚拟值。

此代码背后的意图可能是使用LINQ语法在集合上运行foreach循环。但是,它在这段代码中完成的方式是一种不好的做法,因为LINQ方法应该是纯粹的 - 也就是说,不要修改表达式之外的任何类型的状态。