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 RunIt()
{
Console.WriteLine(0 / zero == double.NaN);
Console.WriteLine(0 / zero != double.NaN);
Console.WriteLine(double.IsNaN(0 / zero));
}
}
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET