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