CA2242:NaN に対して正しくテストします

プロパティ
ルール ID CA2242
Title NaN に対して正しくテストします
[カテゴリ] 使用方法
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 提案として

原因

式は、System.Single.NaN または System.Double.NaN に対して値をテストします。

規則の説明

System.Double.NaN は、数字ではない値を表し、算術演算が未定義の場合、結果として得られます。 値と System.Double.NaN の間の等価性をテストする式は、常に false を返します。 値と System.Double.NaN が等しくないかどうかをテストする式 (C# の場合は !=) は、常に true を返します。

違反の修正方法

この規則の違反を修正し、値が System.Double.NaN を表すかどうかを正確に判断するには、System.Single.IsNaN または System.Double.IsNaN を使用して値をテストします。

どのようなときに警告を抑制するか

この規則による警告は抑制しないでください。

次の例は、System.Double.NaN に対して値を誤ってテストする 2 つの式と、System.Double.IsNaN を正しく使用して値をテストする式を示しています。

Imports System

Namespace ca2242

    Class NaNTests

        Shared zero As Double

        Shared Sub Main2242()
            Console.WriteLine(0 / zero = Double.NaN)
            Console.WriteLine(0 / zero <> Double.NaN)
            Console.WriteLine(Double.IsNaN(0 / zero))
        End Sub

    End Class

End Namespace
class NaNTests
{
    static double zero = 0;

    static void Main()
    {
        Console.WriteLine(0 / zero == double.NaN);
        Console.WriteLine(0 / zero != double.NaN);
        Console.WriteLine(double.IsNaN(0 / zero));
    }
}