CA2242: Testa för NaN korrekt
Property | Värde |
---|---|
Regel-ID | CA2242 |
Title | Testa för NaN korrekt |
Kategori | Användning |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
Ett uttryck testar ett värde mot System.Single.NaN eller System.Double.NaN.
Regelbeskrivning
System.Double.NaN, som representerar ett värde som inte är ett tal, resulterar när en aritmetikåtgärd är odefinierad. Alla uttryck som testar likhet mellan ett värde och System.Double.NaN alltid returnerar false
. Alla uttryck som testar ojämlikhet (!=
i C#) mellan ett värde och System.Double.NaN returnerar true
alltid .
Så här åtgärdar du överträdelser
Om du vill åtgärda ett brott mot den här regeln och korrekt avgöra om ett värde representerar System.Double.NaNanvänder System.Single.IsNaN eller System.Double.IsNaN testar du värdet.
När du ska ignorera varningar
Ignorera inte en varning från den här regeln.
Exempel
I följande exempel visas två uttryck som felaktigt testar ett värde mot System.Double.NaN och ett uttryck som använder System.Double.IsNaN korrekt för att testa värdet.
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));
}
}