Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
| Свойство | Значение |
|---|---|
| Идентификатор правила | 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));
}
}