CA2242: Testar para NaN corretamente
Property | Valor |
---|---|
ID da regra | CA2242 |
Título | Testar para NaN corretamente |
Categoria | Usage |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 8 | Como sugestão |
Causa
Uma expressão testa um valor em relação a System.Single.NaN ou System.Double.NaN.
Descrição da regra
System.Double.NaN, que representa um valor que não é um número, resulta quando uma operação aritmética não é definida. Qualquer expressão que testa a igualdade entre um valor e System.Double.NaN sempre retorna false
. Qualquer expressão que teste a desigualdade (!=
em C#) entre um valor e System.Double.NaN, sempre retorna true
.
Como corrigir violações
Para corrigir uma violação dessa regra e determinar com precisão se um valor representa System.Double.NaN, use System.Single.IsNaN ou System.Double.IsNaN teste o valor.
Quando suprimir avisos
Não suprima um aviso nessa regra.
Exemplo
O exemplo a seguir mostra duas expressões que testam incorretamente um valor em relação a System.Double.NaN e uma expressão que usa System.Double.IsNaN corretamente para testar o 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));
}
}