如何在 Visual Studio 的 IF 条件中检测赋值而不是相等运算符?

How to detect the assignment instead of the equality operator inside the IF condition in Visual Studio?

今天我正在研究一个错误,在我看来,它是由编译器可以检测到的不必要的错误引起的。

var isFoo = true;
var bar = 1;
if (isFoo = false && bar > 0) // Compiler is not warning about assignment instead of equality
{
// ...
}

在条件中设置值并不常见,所以我想问一下,在这种情况下是否可以配置 Visual Studio 以抛出警告或错误?

使用ReSharper。它会警告你表达式总是 true/false.

您可能还会收到编译器警告CS0162: Code is unreachable

大多数 C/C++ 编译器在特定警告级别上提供此类警告。不幸的是,我无法为 Visual Studio 的 C#/.NET 编译器找到相同的设置。

我认为您可以研究一下 code analyzers,它可以提供额外的灵活性来强制执行您需要的代码规则。

我自己还没有使用过它们,但我相信这是前进的正确方向。

编译器检测没有错误。赋值是一个表达式,表示returns赋值。 isFoo = false 实际上是 returns false,这意味着表达式变为 (false && bar >0),它始终为 false。 那是代码分析器可以检测到的东西:表达式总是假的。

在 reader 循环中经常使用赋值作为表达式。在 StreamReader docs 中,该示例使用它一次一行地读取文本:

using (StreamReader sr = new StreamReader("TestFile.txt"))
{
   string line;
   // Read and display lines from the file until the end of
   // the file is reached.
   while ((line = sr.ReadLine()) != null)
   {
       Console.WriteLine(line);
   }
}