CA2242: Testen op NaN correct
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA2242 |
Titel | Testen op NaN correct |
Categorie | Gebruik |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Als suggestie |
Oorzaak
Een expressie test een waarde op System.Single.NaN of System.Double.NaN.
Beschrijving van regel
System.Double.NaN, dat een waarde vertegenwoordigt die geen getal is, resulteert wanneer een rekenkundige bewerking niet is gedefinieerd. Elke expressie die test op gelijkheid tussen een waarde en System.Double.NaN altijd retourneert false
. Elke expressie die test op ongelijkheid (!=
in C#) tussen een waarde en System.Double.NaN altijd retourneert true
.
Schendingen oplossen
Als u een schending van deze regel wilt oplossen en nauwkeurig wilt bepalen of een waarde vertegenwoordigt System.Double.NaN, gebruikt System.Single.IsNaN of System.Double.IsNaN test u de waarde.
Wanneer waarschuwingen onderdrukken
Een waarschuwing van deze regel niet onderdrukken.
Opmerking
In het volgende voorbeeld ziet u twee expressies waarmee een waarde System.Double.NaN onjuist wordt getest en een expressie die correct wordt gebruikt System.Double.IsNaN om de waarde te testen.
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));
}
}