CA2242:正确测试 NaN

类型名

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