c# - 您能否在迭代期间在 LINQ 语句中实时设置/更新值?

标签 c# linq

基于对我的其他问题的建议回答 here...是否可以在 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 to Objects(采用委托(delegate)),您可以,是的 - 使用 statement lambda:

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

不过,我强烈劝阻您不要这样做。这将使理解正在发生的事情变得很多,因为您正在失去惯用 LINQ 代码的声明性。

关于c# - 您能否在迭代期间在 LINQ 语句中实时设置/更新值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19164635/

相关文章:

sql - 如果使用内联 SQL 不好,那么在实践中使用 LINQ 执行查询有何不同?

c# - 在c#中读取azure管道环境变量

c# - 如何在 ModernUI 中获取选中的 ModernTab 的 DisplayName?

c# - Horizo​​ntalAlignment ="Stretch"在 TreeViewItem 中不起作用

linq - linq可以写Update语句吗?

c# - 如何扩展谓词以外的调用表达式?

c# - Mvvm交叉导航结构

c# - 在运行时创建类型 "MyClass : OtherClass<MyClass> { }"?

c# - 如何将唯一的行号添加到我的 Linq 选择中?

c# - 如何从字符串创建属性(集合)表达式选择器?