CA2242: teste para NaN corretamente
TypeName |
TestForNaNCorrectly |
CheckId |
CA2242 |
Categoria |
Microsoft.Usage |
Alteração Significativa |
Sem Quebra |
Causa
Uma expressão testa um valor em Single.Nan ou Double.Nan.
Descrição da Regra
Double.NaN, que representa o não é um número, os resultados quando uma operação aritmética for indefinida.Qualquer expressão que testar a igualdade entre um valor e Double.NaN sempre retorna false.Qualquer expressão que testar a desigualdade entre um valor e Double.NaN sempre retorna true.
Como Corrigir Violações
Para corrigir uma violação desta regra e determinar exatamente se um valor representa Double.NaN, use Single.IsNan ou Double.IsNan para testar o valor.
Quando Suprimir Alertas
Não elimine um alerta desta regra.
Exemplo
O exemplo a seguir mostra duas expressões que testam incorretamente um valor em Double.NaN e uma expressão que usa corretamente Double.IsNaN para testar o valor.
Imports System
Namespace UsageLibrary
Class NaNTests
Shared zero As Double
Shared Sub Main()
Console.WriteLine( 0/zero = Double.NaN )
Console.WriteLine( 0/zero <> Double.NaN )
Console.WriteLine( Double.IsNaN(0/zero) )
End Sub
End Class
End Namespace
using System;
namespace UsageLibrary
{
class NaNTests
{
static double zero;
static void Main()
{
Console.WriteLine( 0/zero == double.NaN );
Console.WriteLine( 0/zero != double.NaN );
Console.WriteLine( double.IsNaN(0/zero) );
}
}
}