CA2242: Teste para NaN corretamente
Property | valor |
---|---|
ID da regra | CA2242 |
Título | Teste NaN corretamente |
Categoria | Utilização |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Como sugestão |
Motivo
Uma expressão testa um valor contra 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 é indefinida. 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 desta regra e determinar com precisão se um valor representa System.Double.NaN, use System.Single.IsNaN ou System.Double.IsNaN para testar o valor.
Quando suprimir avisos
Não suprima um aviso desta regra.
Exemplo
O exemplo a seguir mostra duas expressões que testam incorretamente um valor e System.Double.NaN 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));
}
}