您可以在迭代期间在LINQ语句中实时设置/更新值吗?

时间:2013-10-03 16:41:00

标签: 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。

1 个答案:

答案 0 :(得分:7)

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

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

我会强烈阻止你做这件事。这将使很多更难理解正在发生的事情,因为你正在失去惯用LINQ代码的声明性质。