是否可以在迭代期间在 LINQ 语句中实时设置/更新值

本文关键字:实时 设置 更新 语句 LINQ 迭代 是否 | 更新日期: 2023-09-27 18:33:51

基于我对这里另一个问题的建议答案......是否可以在 LINQ 枚举期间更新变量,以便将其用作测试的一部分?

例如,这样的事情可能吗?

// Assume limitItem is of type Foo and sourceList is of type List<Foo> 
// Note the faux attempt to set limitItemFound in the TakeWhile clause
// That is what I'm wondering.
sourceList.Reverse()
    .TakeWhile(o => (o != limitItem) && !limitItemFound; limitItemFound = limitItemFound || (o == limitItem) )
    .FirstOrDefault(o => ...);

这将使搜索包含limitItem。

是否可以在迭代期间在 LINQ 语句中实时设置/更新值

对于 LINQ to Objects(它接受委托),那么你可以,是的 - 使用语句 lambda

sourceList.Reverse()
    .TakeWhile(o =>  { 
             ... fairly arbitrary code here
             return someValue;
         })
    .FirstOrDefault(o => ...);

不过,我强烈建议您不要这样做。这将使理解正在发生的事情变得更加困难,因为您将失去惯用 LINQ 代码的声明性性质。