| 屬性 | 值 |
|---|---|
| 規則識別碼 | CA2242 |
| 職稱 | 必須正確測試 NaN |
| 類別 | 使用方式 |
| 修正是造成中斷還是不中斷 | 不中斷 |
| 在 .NET 10 中預設啟用 | 作為建議 |
| 適用語言 | C# 與 Visual Basic |
原因
表達式會針對 System.Single.NaN 或 System.Double.NaN測試值。
規則描述
System.Double.NaN,表示不是數位的值,會在未定義算術運算時產生結果。 任何測試數值與 System.Double.NaN 之間是否相等的表達式,一律傳回 false。 任何測試值之間不等於 (!=) 的表達式和 System.Double.NaN 都會返回 true。
如何修正違規
若要修正此規則的違規,並準確地判斷值是否代表 System.Double.NaN,請使用 System.Single.IsNaN 或 System.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));
}
}