CA2242: Testuj poprawnie pod kątem NaN

Właściwości Wartość
Identyfikator reguły CA2242
Tytuł Poprawnie testuj nie-liczby (NaN)
Kategoria Użycie
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Jako sugestia

Przyczyna

Wyrażenie testuje wartość względem System.Single.NaN wartości lub System.Double.NaN.

Opis reguły

System.Double.NaN, który reprezentuje wartość, która nie jest liczbą, powoduje, gdy operacja arytmetyczna jest niezdefiniowana. Dowolne wyrażenie, które sprawdza równość między wartością i System.Double.NaN zawsze zwraca wartość false. Dowolne wyrażenie, które sprawdza nierówności (!= w języku C#) między wartością a System.Double.NaN zawsze zwraca wartość true.

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły i dokładnie określić, czy wartość reprezentuje System.Double.NaNwartość , użyj System.Single.IsNaN polecenia lub System.Double.IsNaN do przetestowania wartości.

Kiedy pomijać ostrzeżenia

Nie pomijaj ostrzeżeń dla tej reguły.

Przykład

W poniższym przykładzie pokazano dwa wyrażenia, które niepoprawnie testować wartość względem System.Double.NaN i wyrażenie, które poprawnie używa System.Double.IsNaN do testowania wartości.

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