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


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

Обновлен: Ноябрь 2007

TypeName

TestForNaNCorrectly

CheckId

CA2242

Категория

Microsoft.Usage

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

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

Причина

Выражение проверяет значение на равенство SingleNan() или DoubleNan().

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

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

Предотвращение нарушений

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

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

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

Пример

В следующем пример показаны два выражения, которые неправильно сравнивают значение с 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) );
      }
   }
}