CA2242: Testuj poprawnie pod kątem NaN
TypeName |
TestForNaNCorrectly |
CheckId |
CA2242 |
Kategoria |
Microsoft.Usage |
Złamanie zmiany |
Bez podziału |
Przyczyna
Wyrażenie badania wartości przeciwko Single.Nan lub Double.Nan.
Opis reguły
Double.NaN, który reprezentuje nie na liczbę, wyniki podczas operacji arytmetycznych jest niezdefiniowane.Dowolne wyrażenie, którego testów równość wartości i Double.NaN zawsze zwraca false.Dowolne wyrażenie, którego testów nierówności między wartością i Double.NaN zawsze zwraca true.
Jak naprawić naruszenia
Aby rozwiązać naruszenie tej zasady i dokładnie określić, czy wartość reprezentuje Double.NaN, użyj Single.IsNan lub Double.IsNan do testowania wartości.
Kiedy do pomijania ostrzeżenia
Nie pomijaj ostrzeżenie od tej reguły.
Przykład
W poniższym przykładzie pokazano dwóch wyrażeń, które testują niepoprawnie wartość przeciwko Double.NaN i wyrażenie używające poprawnie Double.IsNaN do testowania wartości.
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) );
}
}
}