Share via


CA2242: Testa för NaN korrekt

Property Värde
Regel-ID CA2242
Title Testa för NaN korrekt
Kategori Användning
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Som förslag

Orsak

Ett uttryck testar ett värde mot System.Single.NaN eller System.Double.NaN.

Regelbeskrivning

System.Double.NaN, som representerar ett värde som inte är ett tal, resulterar när en aritmetikåtgärd är odefinierad. Alla uttryck som testar likhet mellan ett värde och System.Double.NaN alltid returnerar false. Alla uttryck som testar ojämlikhet (!= i C#) mellan ett värde och System.Double.NaN returnerar truealltid .

Så här åtgärdar du överträdelser

Om du vill åtgärda ett brott mot den här regeln och korrekt avgöra om ett värde representerar System.Double.NaNanvänder System.Single.IsNaN eller System.Double.IsNaN testar du värdet.

När du ska ignorera varningar

Ignorera inte en varning från den här regeln.

Exempel

I följande exempel visas två uttryck som felaktigt testar ett värde mot System.Double.NaN och ett uttryck som använder System.Double.IsNaN korrekt för att testa värdet.

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 Main()
    {
        Console.WriteLine(0 / zero == double.NaN);
        Console.WriteLine(0 / zero != double.NaN);
        Console.WriteLine(double.IsNaN(0 / zero));
    }
}