C#LINQ方法链中赋值的编译器警告?
我刚刚被LINQ方法链中的一个意外赋值表达式咬了一口。这导致foreach循环中使用的枚举数(IEnumerable)永远不会进入循环块,而不是遍历所需的集合项。下面是用于创建迭代器的错误表达式的简化示例:C#LINQ方法链中赋值的编译器警告?,c#,visual-studio,iterator,ienumerable,C#,Visual Studio,Iterator,Ienumerable,我刚刚被LINQ方法链中的一个意外赋值表达式咬了一口。这导致foreach循环中使用的枚举数(IEnumerable)永远不会进入循环块,而不是遍历所需的集合项。下面是用于创建迭代器的错误表达式的简化示例: itemCollection.Where(theItem => theItem.status = false); 显然,用这样一个简单的LINQ方法链很容易捕捉到这一点,但在更复杂的情况下,尤其是涉及多个迭代器或由复杂类提供的迭代器的情况下,追踪错误可能是一种实时浪费。是否有在LIN
itemCollection.Where(theItem => theItem.status = false);
显然,用这样一个简单的LINQ方法链很容易捕捉到这一点,但在更复杂的情况下,尤其是涉及多个迭代器或由复杂类提供的迭代器的情况下,追踪错误可能是一种实时浪费。是否有在LINQ方法链中标记赋值的Visual Studio设置?将此标记为“赋值不用于任何表达式”。正如Virtlink所指出的,在赋值给对象字段的情况下,Resharper不会给出错误。我不认为有VS设置,但我很确定你可以为此编写一个插件。简单的解决方法:永远不要与
false
(和true
)相比,使用iteem=>!item.status
(和item=>item.status
)。它是否编译?您没有提供Func,因为您没有返回布尔值…@LuisFilipe Assignment返回指定的值,因此lambda返回bool
。与svick内联的另一个选项是翻转比较:itItem=>false==itItem.Status
,但我从未养成这种习惯,它总是感觉向后。我当然更喜欢斯维克的方法,你确定吗?该值已分配给对象字段,我怀疑Resharper是否会为此发出警告。在lambda表达式中使用整个表达式的结果。所以,我没有ReSharper,但我怀疑它不会给出那个特别的警告。