CA2242:正确测试 NaN

类型名

TestForNaNCorrectly

CheckId

CA2242

类别

Microsoft.Usage

是否重大更改

原因

表达式针对 Single.NanDouble.Nan 测试某个值。

规则说明

当未定义算术运算时,Double.NaN 表示非数字结果。测试一个值与 Double.NaN 之间的相等关系的任何表达式始终返回 false。测试一个值与 Double.NaN 之间的不等关系的任何表达式始终返回 true。

如何解决冲突

若要修复与此规则的冲突并准确确定某个值是否表示 Double.NaN,请使用 Single.IsNanDouble.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) );
      }
   }
}