Condividi tramite


CA2242: Testare i valori NaN in modo corretto

TypeName

TestForNaNCorrectly

CheckId

CA2242

Category

Microsoft.Usage

Breaking Change

Non sostanziale

Causa

Un'espressione testa un valore in base a SingleNan() o a DoubleNan().

Descrizione della regola

Double.NaN, che rappresenta un valore non numerico, viene restituito quando un'operazione aritmetica non è definita. Le espressioni che testano l'uguaglianza tra un valore e Double.NaN restituiscono sempre false. Le espressioni che testano la disuguaglianza tra un valore e Double.NaN restituiscono sempre true.

Come correggere le violazioni

Per risolvere una violazione di questa regola e determinare accuratamente se un valore rappresenta Double.NaN, testare il valore utilizzando SingleIsNan(Single) o DoubleIsNan(Double).

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

Nell'esempio riportato di seguito vengono illustrate due espressioni che erroneamente testano un valore in base a Double.NaN e un'espressione che utilizza correttamente Double.IsNaN per testare il valore.

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