Udostępnij za pośrednictwem


CA2242: Testuj poprawnie pod kątem NaN

TypeName

TestForNaNCorrectly

CheckId

CA2242

Kategoria

Microsoft.Usage

Złamanie zmiany

Bez podziału

Przyczyna

Wyrażenie badania wartości przeciwko Single.Nan lub Double.Nan.

Opis reguły

Double.NaN, który reprezentuje nie na liczbę, wyniki podczas operacji arytmetycznych jest niezdefiniowane.Dowolne wyrażenie, którego testów równość wartości i Double.NaN zawsze zwraca false.Dowolne wyrażenie, którego testów nierówności między wartością i Double.NaN zawsze zwraca true.

Jak naprawić naruszenia

Aby rozwiązać naruszenie tej zasady i dokładnie określić, czy wartość reprezentuje Double.NaN, użyj Single.IsNan lub Double.IsNan do testowania wartości.

Kiedy do pomijania ostrzeżenia

Nie pomijaj ostrzeżenie od tej reguły.

Przykład

W poniższym przykładzie pokazano dwóch wyrażeń, które testują niepoprawnie wartość przeciwko Double.NaN i wyrażenie używające poprawnie Double.IsNaN do testowania wartości.

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