基于对我的其他问题的建议回答 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/