CA2242: Testa för NaN korrekt

Egenskap Värde
Regel-ID CA2242
Title Testa korrekt för NaN
Kategori Användning
Korrigeringen är antingen invasiv eller icke-invasiv Oumbrytbar
Aktiverad som standard i .NET 10 Som förslag
Tillämpliga språk C# och Visual Basic

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.NaN, använd System.Single.IsNaN eller System.Double.IsNaN för att testa 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 RunIt()
    {
        Console.WriteLine(0 / zero == double.NaN);
        Console.WriteLine(0 / zero != double.NaN);
        Console.WriteLine(double.IsNaN(0 / zero));
    }
}