Le test de NaN doit être correctement exécuté
Mise à jour : novembre 2007
TypeName |
TestForNaNCorrectly |
CheckId |
CA2242 |
Catégorie |
Microsoft.Usage |
Modification avec rupture |
Modification sans rupture |
Cause
Une expression teste une valeur par rapport à SingleNan() ou à DoubleNan().
Description de la règle
Double.NaN qui représente une valeur non numérique, résulte lorsqu'une opération arithmétique est indéfinie. Une expression qui teste l'égalité entre une valeur et Double.NaN retourne toujours false. Une expression qui teste l'inégalité entre une valeur et Double.NaN retourne toujours true.
Comment corriger les violations
Pour résoudre une violation de cette règle et déterminer correctement si une valeur représente Double.NaN, utilisez SingleIsNan(Single) ou DoubleIsNan(Double) pour tester la valeur.
Quand supprimer les avertissements
Ne supprimez aucun avertissement de cette règle.
Exemple
L'exemple suivant indique deux expressions qui testent de manière incorrecte une valeur par rapport à Double.NaN et une expression qui utilise correctement Double.IsNaN pour tester la valeur.
Imports System
Namespace UsageLibrary
Class NaNTests
Shared zero As Double
Shared Sub Main()
Console.WriteLine( 0/zero = Double.NaN )
Console.WriteLine( 0/zero <> Double.NaN )
Console.WriteLine( Double.IsNaN(0/zero) )
End Sub
End Class
End Namespace
using System;
namespace UsageLibrary
{
class NaNTests
{
static double zero;
static void Main()
{
Console.WriteLine( 0/zero == double.NaN );
Console.WriteLine( 0/zero != double.NaN );
Console.WriteLine( double.IsNaN(0/zero) );
}
}
}