Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA2242 |
| Titel | Testen op NaN correct |
| Categorie | Gebruik |
| Fix kan brekend of niet-brekend zijn | Niet-brekend |
| Standaard ingeschakeld in .NET 10 | Als suggestie |
| Toepasselijke talen | C# en Visual Basic |
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 zal altijd false retourneren. Elke expressie die test op ongelijkheid (!= in C#) tussen een waarde en System.Double.NaN, retourneert altijd true.
Hoe schendingen op te lossen
Als u een schending van deze regel wilt oplossen en nauwkeurig wilt bepalen of een waarde System.Double.NaN vertegenwoordigt, gebruikt u System.Single.IsNaN of System.Double.IsNaN om de waarde te testen.
Wanneer waarschuwingen onderdrukken
Een waarschuwing van deze regel niet onderdrukken.
Voorbeeld
In het volgende voorbeeld ziet u twee uitdrukkingen waarbij een waarde onjuist wordt getest tegen System.Double.NaN en een uitdrukking die correct System.Double.IsNaN wordt gebruikt 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));
}
}