Поделиться через


CA2242: правильно выполняйте проверку NaN

TypeName

TestForNaNCorrectly

CheckId

CA2242

Категория

Microsoft.Usage

Критическое изменение

Не критическое

Причина

Выражение проверяет значение на равенство Single.Nan или Double.Nan.

Описание правила

Значение Double.NaN, представляющее не число, возвращается, если арифметическая операция не определена.Любое выражение, которое проверяет равенство значения и Double.NaN, всегда возвращает false.Любое выражение, которое проверяет неравенство значения и Double.NaN, всегда возвращает true.

Устранение нарушений

Чтобы устранить нарушение данного правила и точно сравнить значение с Double.NaN, используйте для проверки этого значения метод Single.IsNan или Double.IsNan.

Отключение предупреждений

Для этого правила отключать вывод предупреждений не следует.

Пример

В следующем пример показаны два выражения, которые неправильно сравнивают значение с Double.NaN, и еще одно выражение, правильно использующее метод Double.IsNaN для проверки значения.

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