Ordnungsgemäß auf NaN testen

Aktualisiert: November 2007

TypeName

TestForNaNCorrectly

CheckId

CA2242

Kategorie

Microsoft.Usage

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Ein Ausdruck testet einen Wert anhand von SingleNan() oder DoubleNan().

Regelbeschreibung

Double.NaN steht für keine Zahl (Not a Number, NaN) und wird ausgegeben, wenn eine arithmetische Operation nicht definiert ist. Jeder Ausdruck, durch den die Gleichheit zwischen einem Wert und Double.NaN getestet wird, gibt immer false zurück. Jeder Ausdruck, durch den die Ungleichheit zwischen einem Wert und Double.NaN getestet wird, gibt immer true zurück.

Behandlung von Verstößen

Um einen Verstoß gegen diese Regel zu beheben und genau zu bestimmen, ob ein Wert Double.NaN darstellt, verwenden Sie SingleIsNan(Single) oder DoubleIsNan(Double), um den Wert zu testen.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Beispiel

Das folgende Beispiel enthält zwei Ausdrücke, durch die ein Wert falsch anhand von Double.NaN getestet wird, sowie einen Ausdruck, der Double.IsNaN auf richtige Weise zum Testen des Werts verwendet.

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