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