CA2242: правильно выполняйте проверку NaN

Свойство Значение
Идентификатор правила CA2242
Заголовок Правильно выполняйте проверку NaN
Категория Использование
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 Как предложение

Причина

Выражение проверяет значение на соответствие 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 Main()
    {
        Console.WriteLine(0 / zero == double.NaN);
        Console.WriteLine(0 / zero != double.NaN);
        Console.WriteLine(double.IsNaN(0 / zero));
    }
}