Sdílet prostřednictvím


CA2242: Testujte správně NaN

Vlastnost Hodnota
ID pravidla CA2242
Název Testujte správně NaN
Kategorie Využití
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 9 Jako návrh

Příčina

Výraz testuje hodnotu proti System.Single.NaN nebo System.Double.NaN.

Popis pravidla

System.Double.NaN, který představuje hodnotu, která není číslo, výsledky v případě, že aritmetická operace není definována. Libovolný výraz, který testuje rovnost mezi hodnotou a System.Double.NaN vždy vrátí false. Libovolný výraz, který testuje nerovnost (!= v jazyce C#) mezi hodnotou a System.Double.NaN vždy vrátí true.

Jak opravit porušení

Chcete-li opravit porušení tohoto pravidla a přesně určit, zda hodnota představuje System.Double.NaN, použijte System.Single.IsNaN nebo System.Double.IsNaN otestujte hodnotu.

Kdy potlačit upozornění

Nepotlačujte upozornění na toto pravidlo.

Příklad

Následující příklad ukazuje dva výrazy, které nesprávně testují hodnotu System.Double.NaN a výraz, který správně používá System.Double.IsNaN k otestování hodnoty.

Imports System

Namespace ca2242

    Class NaNTests

        Shared zero As Double

        Shared Sub Main2242()
            Console.WriteLine(0 / zero = Double.NaN)
            Console.WriteLine(0 / zero <> Double.NaN)
            Console.WriteLine(Double.IsNaN(0 / zero))
        End Sub

    End Class

End Namespace
class NaNTests
{
    static double zero = 0;

    static void RunIt()
    {
        Console.WriteLine(0 / zero == double.NaN);
        Console.WriteLine(0 / zero != double.NaN);
        Console.WriteLine(double.IsNaN(0 / zero));
    }
}