【发布时间】:2013-02-21 00:14:44
【问题描述】:
我刚刚被 LINQ 方法链中的一个意外赋值表达式所吸引。这导致在 foreach 循环中使用的枚举器 (IEnumerable) 永远不会进入循环块,而是遍历所需的集合项。下面是用于创建迭代器的错误表达式的简化示例:
itemCollection.Where(theItem => theItem.status = false);
显然,使用这样的简单 LINQ 方法链相对容易捕捉到这一点,但在更复杂的情况下,尤其是涉及多个迭代器或由复杂类提供的迭代器的情况下,追踪错误可能会浪费时间.是否有在 LINQ 方法链中标记分配的 Visual Studio 设置?
【问题讨论】:
-
简单的解决方法:永远不要与
false(和true)比较,使用theItem => !theItem.status(和theItem => theItem.status)。 -
它可以编译吗?您没有提供 Func
因为您没有返回布尔值... -
@LuisFilipe 赋值返回赋值,所以 lambda is 返回
bool。 -
与 svick 一致的另一个选项是翻转比较:
theItem => false == theItem.Status,但我从未养成这种习惯,而且总是感觉倒退。我绝对更喜欢 svick 的方法。
标签: c# visual-studio iterator ienumerable