如何在 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);
}
}
今天我正在研究一个错误,在我看来,它是由编译器可以检测到的不必要的错误引起的。
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);
}
}