Udostępnij za pośrednictwem


CA2242: Testuj pod kątem NaN w sposób prawidłowy

Właściwości Wartość
Identyfikator reguły CA2242
Tytuł Poprawnie testuj NaN
Kategoria Użycie
Poprawka łamiąca lub nienaruszająca Niezgodność
Domyślnie włączone na platformie .NET 10 Jako sugestia
Zastosowane języki C# i Visual Basic

Przyczyna

Wyrażenie porównuje wartość do System.Single.NaN lub System.Double.NaN.

Opis reguły

System.Double.NaN, który reprezentuje wartość niebędącą liczbą, jest wynikiem, 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ść jest reprezentowana przez System.Double.NaN, użyj polecenia System.Single.IsNaN 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 testują 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 RunIt()
    {
        Console.WriteLine(0 / zero == double.NaN);
        Console.WriteLine(0 / zero != double.NaN);
        Console.WriteLine(double.IsNaN(0 / zero));
    }
}