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 9 | 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 RunIt()
{
Console.WriteLine(0 / zero == double.NaN);
Console.WriteLine(0 / zero != double.NaN);
Console.WriteLine(double.IsNaN(0 / zero));
}
}