CA2242: правильно выполняйте проверку NaN
TypeName |
TestForNaNCorrectly |
CheckId |
CA2242 |
Категория |
Microsoft.Usage |
Критическое изменение |
Не критическое |
Причина
Выражение проверяет значение на равенство Single.Nan или Double.Nan.
Описание правила
Значение Double.NaN, представляющее не число, возвращается, если арифметическая операция не определена.Любое выражение, которое проверяет равенство значения и Double.NaN, всегда возвращает false.Любое выражение, которое проверяет неравенство значения и Double.NaN, всегда возвращает true.
Устранение нарушений
Чтобы устранить нарушение данного правила и точно сравнить значение с Double.NaN, используйте для проверки этого значения метод Single.IsNan или Double.IsNan.
Отключение предупреждений
Для этого правила отключать вывод предупреждений не следует.
Пример
В следующем пример показаны два выражения, которые неправильно сравнивают значение с Double.NaN, и еще одно выражение, правильно использующее метод Double.IsNaN для проверки значения.
Imports System
Namespace UsageLibrary
Class NaNTests
Shared zero As Double
Shared Sub Main()
Console.WriteLine( 0/zero = Double.NaN )
Console.WriteLine( 0/zero <> Double.NaN )
Console.WriteLine( Double.IsNaN(0/zero) )
End Sub
End Class
End Namespace
using System;
namespace UsageLibrary
{
class NaNTests
{
static double zero;
static void Main()
{
Console.WriteLine( 0/zero == double.NaN );
Console.WriteLine( 0/zero != double.NaN );
Console.WriteLine( double.IsNaN(0/zero) );
}
}
}