CA2242: 正確測試 NaN

屬性
規則識別碼 CA2242
職稱 必須正確測試 NaN
類別 使用方式
修正是造成中斷還是不中斷 不中斷
在 .NET 10 中預設啟用 作為建議
適用語言 C# 與 Visual Basic

原因

表達式會針對 System.Single.NaNSystem.Double.NaN測試值。

規則描述

System.Double.NaN,表示不是數位的值,會在未定義算術運算時產生結果。 任何測試數值與 System.Double.NaN 之間是否相等的表達式,一律傳回 false。 任何測試值之間不等於 (!=) 的表達式和 System.Double.NaN 都會返回 true

如何修正違規

若要修正此規則的違規,並準確地判斷值是否代表 System.Double.NaN,請使用 System.Single.IsNaNSystem.Double.IsNaN 來測試值。

隱藏警告的時機

請勿隱藏此規則的警告。

範例

下列範例顯示兩個使用 System.Double.NaN 來不正確測試值的表達式,以及一個正確使用 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 RunIt()
    {
        Console.WriteLine(0 / zero == double.NaN);
        Console.WriteLine(0 / zero != double.NaN);
        Console.WriteLine(double.IsNaN(0 / zero));
    }
}