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 に対して正しくテストしない 2 つの式と 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) );
      }
   }
}