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 9 | 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 RunIt()
{
Console.WriteLine(0 / zero == double.NaN);
Console.WriteLine(0 / zero != double.NaN);
Console.WriteLine(double.IsNaN(0 / zero));
}
}