Freigeben über


CA2242: Ordnungsgemäß auf NaN testen.

Eigenschaft Wert
Regel-ID CA2242
Titel Ordnungsgemäß auf NaN testen.
Kategorie Verwendung
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 9 aktiviert Als Vorschlag

Ursache

Ein Ausdruck testet einen Wert anhand von System.Single.NaN oder System.Double.NaN.

Regelbeschreibung

System.Double.NaN stellt einen Wert dar, der keine Zahl ist und gibt Ergebnisse aus, wenn eine arithmetische Operation undefiniert ist. Jeder Ausdruck, der auf Gleichheit zwischen einem Wert und einem System.Double.NaN testet, gibt immer false zurück. Jeder Ausdruck, der auf Ungleichheit (!= in C#) zwischen einem Wert und einem System.Double.NaN testet, gibt immer true zurück.

Behandeln von Verstößen

Verwenden Sie System.Single.IsNaN oder System.Double.IsNaN,um den Wert zu testen und so einen Verstoß gegen diese Regel zu beheben und genau zu bestimmen, ob ein Wert System.Double.NaN darstellt.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Beispiel

Im folgenden Beispiel werden zwei Ausdrücke gezeigt, die fälschlicherweise einen Wert anhand von System.Double.NaN testen, sowie ein Ausdruck, der System.Double.IsNaN ordnungsgemäß verwendet, um den Wert zu 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));
    }
}