【问题标题】:Compiler warning for assignments in C# LINQ method chains?C# LINQ 方法链中分配的编译器警告?
【发布时间】: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


【解决方案1】:

ReSharper 会将其标记为“分配的值未在任何表达式中使用”。 正如 Virtlink 指出的那样,Resharper 在对对象字段进行分配的情况下不会出错。我不认为有 VS 设置,但我很确定你可以为此编写一个插件。

【讨论】:

  • 你确定吗?该值被分配给一个对象字段,我怀疑 Resharper 会为此发出警告。整个表达式的结果用于 lambda 表达式。所以,我没有 ReSharper,但我怀疑它不会给出 那个 特别警告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
相关资源
最近更新 更多