Partilhar via


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 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));
    }
}