Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA2242 |
| Заголовок | Правильно выполняйте проверку NaN |
| Категория | Использование |
| Исправление является критическим или не критическим | Не критическое |
| Включен по умолчанию в .NET 10 | Как предложение |
Причина
Выражение проверяет значение на соответствие 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));
}
}