CA2242: правильно выполняйте проверку NaN
Свойство | Значение |
---|---|
Идентификатор правила | CA2242 |
Заголовок | Правильно выполняйте проверку NaN |
Категория | Использование |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | Как предложение |
Причина
Выражение проверяет значение на соответствие 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));
}
}