Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| 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));
}
}