Compartilhar via


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