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é par défaut dans .NET 8 Comme 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 Main()
    {
        Console.WriteLine(0 / zero == double.NaN);
        Console.WriteLine(0 / zero != double.NaN);
        Console.WriteLine(double.IsNaN(0 / zero));
    }
}