CA2242: Ordnungsgemäß auf NaN testen.
Eigenschaft | Wert |
---|---|
Regel-ID | CA2242 |
Titel | Ordnungsgemäß auf NaN testen. |
Kategorie | Verwendung |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 8 aktiviert | Als Vorschlag |
Ursache
Ein Ausdruck testet einen Wert anhand von System.Single.NaN oder System.Double.NaN.
Regelbeschreibung
System.Double.NaN stellt einen Wert dar, der keine Zahl ist und gibt Ergebnisse aus, wenn eine arithmetische Operation undefiniert ist. Jeder Ausdruck, der auf Gleichheit zwischen einem Wert und einem System.Double.NaN testet, gibt immer false
zurück. Jeder Ausdruck, der auf Ungleichheit (!=
in C#) zwischen einem Wert und einem System.Double.NaN testet, gibt immer true
zurück.
Behandeln von Verstößen
Verwenden Sie System.Single.IsNaN oder System.Double.IsNaN,um den Wert zu testen und so einen Verstoß gegen diese Regel zu beheben und genau zu bestimmen, ob ein Wert System.Double.NaN darstellt.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnung dieser Regel.
Beispiel
Im folgenden Beispiel werden zwei Ausdrücke gezeigt, die fälschlicherweise einen Wert anhand von System.Double.NaN testen, sowie ein Ausdruck, der System.Double.IsNaN ordnungsgemäß verwendet, um den Wert zu testen.
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));
}
}