Partager via


CA2242 : Effectuez correctement des tests NaN

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) );
      }
   }
}