CA2242: Comprobar NaN correctamente

Propiedad Value
Identificador de la regla CA2242
Título Comprobar NaN correctamente
Categoría Uso
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 8 Como sugerencia

Causa

Una expresión prueba un valor con System.Single.NaN o System.Double.NaN.

Descripción de la regla

System.Double.NaN, que representa un valor no numérico, se produce cuando una operación aritmética no está definida. Cualquier expresión que comprueba la igualdad entre un valor y System.Double.NaN siempre devuelve false. Cualquier expresión que comprueba la no igualdad (!= en C#) entre un valor y System.Double.NaN siempre devuelve true.

Cómo corregir infracciones

Para corregir una infracción de esta regla y determinar de forma precisa si un valor representa System.Double.NaN, use System.Single.IsNaN o System.Double.IsNaN para comprobar el valor.

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla.

Ejemplo

El ejemplo siguiente muestra dos expresiones que comprueban un valor con System.Double.NaN de forma incorrecta y otra expresión que usa System.Double.IsNaN correctamente para comprobar el valor.

Imports System

Namespace ca2242

    Class NaNTests

        Shared zero As Double

        Shared Sub Main2242()
            Console.WriteLine(0 / zero = Double.NaN)
            Console.WriteLine(0 / zero <> Double.NaN)
            Console.WriteLine(Double.IsNaN(0 / zero))
        End Sub

    End Class

End Namespace
class NaNTests
{
    static double zero = 0;

    static void Main()
    {
        Console.WriteLine(0 / zero == double.NaN);
        Console.WriteLine(0 / zero != double.NaN);
        Console.WriteLine(double.IsNaN(0 / zero));
    }
}