Udostępnij za pośrednictwem


CA2242: Test NaN poprawnie

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