Het correct testen van NaN

Eigenschap Waarde
Regel-id CA2242
Titel Testen op NaN correct
Categorie Gebruik
Fix kan brekend of niet-brekend zijn Niet-brekend
Standaard ingeschakeld in .NET 10 Als suggestie
Toepasselijke talen C# en Visual Basic

Oorzaak

Een expressie test een waarde op System.Single.NaN of System.Double.NaN.

Beschrijving van regel

System.Double.NaN, dat een waarde vertegenwoordigt die geen getal is, resulteert wanneer een rekenkundige bewerking niet is gedefinieerd. Elke expressie die test op gelijkheid tussen een waarde en System.Double.NaN zal altijd false retourneren. Elke expressie die test op ongelijkheid (!= in C#) tussen een waarde en System.Double.NaN, retourneert altijd true.

Hoe schendingen op te lossen

Als u een schending van deze regel wilt oplossen en nauwkeurig wilt bepalen of een waarde System.Double.NaN vertegenwoordigt, gebruikt u System.Single.IsNaN of System.Double.IsNaN om de waarde te testen.

Wanneer waarschuwingen onderdrukken

Een waarschuwing van deze regel niet onderdrukken.

Voorbeeld

In het volgende voorbeeld ziet u twee uitdrukkingen waarbij een waarde onjuist wordt getest tegen System.Double.NaN en een uitdrukking die correct System.Double.IsNaN wordt gebruikt om de waarde te testen.

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));
    }
}