Megosztás a következőn keresztül:


CA2242: A NaN helyes tesztelése

Tulajdonság Érték
Szabályazonosító CA2242
Cím NaN helyes tesztelése
Kategória Használat
A javítás kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Javaslatként

Ok

A kifejezések egy értéket tesztelnek a (vagy) System.Double.NaNértékenSystem.Single.NaN.

Szabály leírása

System.Double.NaN, amely nem számértéket jelöl, akkor jön létre, ha egy számtani művelet nincs meghatározva. Bármely kifejezés, amely egy érték közötti egyenlőséget tesztel, és System.Double.NaN mindig visszaad false. Bármely kifejezés, amely egy érték közötti egyenlőtlenséget (!= C#-ban) tesztel, és System.Double.NaN mindig visszaad true.

Szabálysértések kijavítása

A szabály megsértésének kijavításához és annak pontos meghatározásához, hogy egy érték jelöli-e System.Double.NaNaz értéket, használja System.Single.IsNaN vagy System.Double.IsNaN tesztelje az értéket.

Mikor kell letiltani a figyelmeztetéseket?

Ne tiltsa el a szabály figyelmeztetését.

Példa

Az alábbi példa két olyan kifejezést mutat be, amelyek helytelenül tesztelnek egy értéket System.Double.NaN , és egy olyan kifejezést, amely helyesen használja System.Double.IsNaN az érték tesztelését.

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));
    }
}