Why is this an issue?

double.NaN and float.NaN are not equal to anything, not even themselves.

When anything is compared with NaN using one of the comparison operators >, >=, <, or the equality operator ==, the result will always be false. In contrast, when anything is compared with NaN using the inequality operator !=, the result will always be true.

Instead, the best way to see whether a variable is equal to NaN is to use the float.IsNaN and double.IsNaN methods, which work as expected.

How to fix it

Code examples

Noncompliant code example

var a = double.NaN;

if (a == double.NaN) // Noncompliant: always false
{
  Console.WriteLine("a is not a number");
}
if (a != double.NaN)  // Noncompliant: always true
{
  Console.WriteLine("a is not NaN");
}

Compliant solution

var a = double.NaN;

if (double.IsNaN(a))
{
  Console.WriteLine("a is not a number");
}
if (!double.IsNaN(a))
{
  Console.WriteLine("a is not NaN");
}