CA2242 : Effectuez correctement des tests NaN
Propriété | Value |
---|---|
Identificateur de la règle | CA2242 |
Titre | Effectuez correctement des tests NaN |
Catégorie | Utilisation |
Le correctif est cassant ou non cassant | Sans rupture |
Activée par défaut dans .NET 9 | À titre de suggestion |
Cause
Une expression teste une valeur par rapport à System.Single.NaN ou System.Double.NaN.
Description de la règle
System.Double.NaN, qui représente une valeur qui n’est pas un nombre, se produit lorsqu’une opération arithmétique n’est pas définie. Toute expression qui teste l’égalité entre une valeur et System.Double.NaN retourne toujours false
. Toute expression qui teste l’inégalité (!=
en C#) entre une valeur et System.Double.NaN retourne toujours true
.
Comment corriger les violations
Pour corriger une violation de cette règle et déterminer avec précision si une valeur représente System.Double.NaN, utilisez System.Single.IsNaN ou System.Double.IsNaN pour tester la valeur.
Quand supprimer les avertissements
Ne supprimez aucun avertissement de cette règle.
Exemple
L’exemple suivant montre deux expressions qui testent incorrectement une valeur par rapport à System.Double.NaN, et une expression qui utilise System.Double.IsNaN correctement pour tester la valeur.
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));
}
}