Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA2242 |
| Název | Testujte správně NaN |
| Kategorie | Využití |
| Oprava, která může být destruktivní nebo nedestruktivní | Nezlomitelný |
| Povoleno ve výchozím nastavení v .NET 10 | Jako návrh |
| Příslušné jazyky | C# a Visual Basic |
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í číselná hodnota, nastává, když je aritmetická operace nedefinová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));
}
}