CA2242:正确测试 NaN
属性 | 值 |
---|---|
规则 ID | CA2242 |
标题 | 正确测试 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 测试值的两个表达式,以及正确使用 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));
}
}