| 属性 | 值 |
|---|---|
| 规则 ID | CA2242 |
| 标题 | 正确测试 NaN |
| 类别 | 使用情况 |
| 修复会引起中断还是不会引起中断 | 非中断 |
| 在 .NET 10 中默认启用 | 作为一种建议 |
| 适用的语言 | C# 和 Visual Basic |
原因
一个表达式将一个值与 System.Single.NaN 或 System.Double.NaN 进行测试。
规则说明
System.Double.NaN,它表示非数值的值,算术运算未定义时会得到这样的值。 测试一个值和 System.Double.NaN 是否相等的任何表达式都始终返回 false。 测试一个值和 != 是否不相等(C# 中的 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));
}
}