CA2242: Prueba para NaN correcta

Nombre de tipo

TestForNaNCorrectly

Identificador de comprobación

CA2242

Categoría

Microsoft.Usage

Cambio problemático

No

Causa

Una expresión prueba un valor con SingleNan() o DoubleNan().

Descripción de la regla

Double.NaN, que representa un valor no numérico, se obtiene cuando una operación aritmética no está definida. Cualquier expresión que pruebe la igualdad entre un valor y Double.NaN siempre devuelve false. Cualquier expresión que pruebe la desigualdad entre un valor y Double.NaN siempre devuelve true.

Cómo corregir infracciones

Para corregir una infracción de esta regla y determinar con precisión si un valor representa Double.NaN, utilice SingleIsNan(Single) o DoubleIsNan(Double) para probar el valor.

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.

Ejemplo

En el ejemplo siguiente se muestran dos expresiones que prueban incorrectamente un valor con Double.NaN y una expresión que utiliza correctamente Double.IsNaN para probar el valor.

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