Share via


CA2242: Testen op NaN correct

Eigenschappen Weergegeven als
Regel-id CA2242
Titel Testen op NaN correct
Categorie Gebruik
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 9 Als suggestie

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 altijd retourneert false. Elke expressie die test op ongelijkheid (!= in C#) tussen een waarde en System.Double.NaN altijd retourneert true.

Schendingen oplossen

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

Wanneer waarschuwingen onderdrukken

Een waarschuwing van deze regel niet onderdrukken.

Opmerking

In het volgende voorbeeld ziet u twee expressies waarmee een waarde System.Double.NaN onjuist wordt getest en een expressie die correct wordt gebruikt System.Double.IsNaN 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));
    }
}