CA2242: Test for NaN correctly
TypeName |
TestForNaNCorrectly |
CheckId |
CA2242 |
Category |
Microsoft.Usage |
Breaking Change |
Non Breaking |
Cause
An expression tests a value against SingleNan() or DoubleNan().
Rule Description
Double.NaN, which represents not-a-number, results when an arithmetic operation is undefined. Any expression that tests equality between a value and Double.NaN always returns false. Any expression that tests inequality between a value and Double.NaN always returns true.
How to Fix Violations
To fix a violation of this rule and accurately determine whether a value represents Double.NaN, use SingleIsNan(Single) or DoubleIsNan(Double) to test the value.
When to Suppress Warnings
Do not suppress a warning from this rule.
Example
The following example shows two expressions that incorrectly test a value against Double.NaN and an expression that correctly uses Double.IsNaN to test the value.
Imports System
Namespace UsageLibrary
Class NaNTests
Shared zero As Double
Shared Sub Main()
Console.WriteLine( 0/zero = Double.NaN )
Console.WriteLine( 0/zero <> Double.NaN )
Console.WriteLine( Double.IsNaN(0/zero) )
End Sub
End Class
End Namespace
using System;
namespace UsageLibrary
{
class NaNTests
{
static double zero;
static void Main()
{
Console.WriteLine( 0/zero == double.NaN );
Console.WriteLine( 0/zero != double.NaN );
Console.WriteLine( double.IsNaN(0/zero) );
}
}
}