Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
| 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 10 | 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));
}
}