CA2242: Testujte správně NaN
Vlastnost | Hodnota |
---|---|
ID pravidla | CA2242 |
Název | Testujte správně NaN |
Kategorie | Využití |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 9 | Jako návrh |
Příčina
Výraz testuje hodnotu proti System.Single.NaN nebo System.Double.NaN.
Popis pravidla
System.Double.NaN, který představuje hodnotu, která není číslo, výsledky v případě, že aritmetická operace není definována. Libovolný výraz, který testuje rovnost mezi hodnotou a System.Double.NaN vždy vrátí false
. Libovolný výraz, který testuje nerovnost (!=
v jazyce C#) mezi hodnotou a System.Double.NaN vždy vrátí true
.
Jak opravit porušení
Chcete-li opravit porušení tohoto pravidla a přesně určit, zda hodnota představuje System.Double.NaN, použijte System.Single.IsNaN nebo System.Double.IsNaN otestujte hodnotu.
Kdy potlačit upozornění
Nepotlačujte upozornění na toto pravidlo.
Příklad
Následující příklad ukazuje dva výrazy, které nesprávně testují hodnotu System.Double.NaN a výraz, který správně používá System.Double.IsNaN k otestování hodnoty.
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));
}
}