C# 在LINQ Select语句中调用返回true

C# 在LINQ Select语句中调用返回true,c#,linq,C#,Linq,我在一个以前从未见过的老项目中遇到了一些代码,这让我对它的意图感到困惑 updatables.Select(r => { // some operations are done here for each element in the list return true; }).ToArray(); 似乎正在使用select语句来迭代Updateables集合。似乎ToArray的调用也没有做任何事情 我的问题是,Select语句中的调用返回true有什么作用呢?这看起来很像是

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

updatables.Select(r =>
{
  // some operations are done here for each element in the list  
  return true;
}).ToArray();
似乎正在使用select语句来迭代Updateables集合。似乎ToArray的
调用也没有做任何事情


我的问题是,
Select
语句中的调用返回true有什么作用呢?

这看起来很像是模仿
ForEach

  • 添加了
    ToArray()
    调用,以确保
    可更新文件将被迭代完成
  • 添加了
    返回true
    以使编译器静音,该编译器不允许
    操作
    ,但允许在LINQ的
    选择中使用
    Func

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

Select
采用
Func
——这意味着它不会接受
操作。换句话说,不返回任何内容的lambda在传递到
Select
时将导致编译错误,因此作者通过让它返回一个伪值绕过了该“限制”


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

对于原始集合中的每个实体,都返回
true
。基本上将原始实体投影到
布尔值
。结果是
IEnumerable
。要阵列执行LINQ查询。。。但问题是执行的
某些操作将产生副作用,但
选择
并不是为了这样做……它看起来像是
foreach
的一个又快又丑的LINQ版本。这是一个更新?为什么人们认为LINQ比foreach循环快?这里的情况正好相反,创建与
updateables
大小相同的新数组是没有明显原因的。或者使用专门为此类任务构建的东西,例如。