Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#LINQ方法链中赋值的编译器警告?_C#_Visual Studio_Iterator_Ienumerable - Fatal编程技术网

C#LINQ方法链中赋值的编译器警告?

C#LINQ方法链中赋值的编译器警告?,c#,visual-studio,iterator,ienumerable,C#,Visual Studio,Iterator,Ienumerable,我刚刚被LINQ方法链中的一个意外赋值表达式咬了一口。这导致foreach循环中使用的枚举数(IEnumerable)永远不会进入循环块,而不是遍历所需的集合项。下面是用于创建迭代器的错误表达式的简化示例: itemCollection.Where(theItem => theItem.status = false); 显然,用这样一个简单的LINQ方法链很容易捕捉到这一点,但在更复杂的情况下,尤其是涉及多个迭代器或由复杂类提供的迭代器的情况下,追踪错误可能是一种实时浪费。是否有在LIN

我刚刚被LINQ方法链中的一个意外赋值表达式咬了一口。这导致foreach循环中使用的枚举数(IEnumerable)永远不会进入循环块,而不是遍历所需的集合项。下面是用于创建迭代器的错误表达式的简化示例:

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,但我怀疑它不会给出那个特别的警告。