CA2242: Prueba para NaN correctaCA2242: Test for NaN correctly

TypeNameTypeName TestForNaNCorrectlyTestForNaNCorrectly
Identificador de comprobaciónCheckId CA2242CA2242
CategoríaCategory Microsoft.UsageMicrosoft.Usage
Cambio problemáticoBreaking Change No trascendentalNon Breaking

MotivoCause

Una expresión prueba un valor respecto System.Single.NaN o System.Double.NaN.An expression tests a value against System.Single.NaN or System.Double.NaN.

Descripción de la reglaRule Description

System.Double.NaN, que representa not a number, se produce cuando una operación aritmética es indefinida.System.Double.NaN, which represents not-a-number, results when an arithmetic operation is undefined. Cualquier expresión que comprueba la igualdad entre un valor y System.Double.NaN siempre devuelve false.Any expression that tests equality between a value and System.Double.NaN always returns false. Cualquier expresión que comprueba la desigualdad entre un valor y System.Double.NaN siempre devuelve true.Any expression that tests inequality between a value and System.Double.NaN always returns true.

Cómo corregir infraccionesHow to Fix Violations

Para corregir una infracción de esta regla y determinar con precisión si representa un valor System.Double.NaN, use System.Single.IsNaN o System.Double.IsNaN para probar el valor.To fix a violation of this rule and accurately determine whether a value represents System.Double.NaN, use System.Single.IsNaN or System.Double.IsNaN to test the value.

Cuándo suprimir advertenciasWhen to Suppress Warnings

No suprima las advertencias de esta regla.Do not suppress a warning from this rule.

EjemploExample

En el ejemplo siguiente se muestra dos expresiones que prueban incorrectamente un valor en System.Double.NaN y una expresión que utiliza correctamente System.Double.IsNaN para probar el valor.The following example shows two expressions that incorrectly test a value against System.Double.NaN and an expression that correctly uses System.Double.IsNaN to test the value.

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