Condividi tramite


CA2242: Testare i valori NaN in modo corretto

Proprietà valore
ID regola CA2242
Title Testare i valori NaN in modo corretto
Categoria Utilizzo
La correzione causa un'interruzione o meno Non causa un'interruzione
Abilitato per impostazione predefinita in .NET 9 Come suggerimento

Causa

Un'espressione verifica un valore su System.Single.NaN o System.Double.NaN.

Descrizione regola

System.Double.NaN, che rappresenta un valore diverso da un numero, restituisce quando un'operazione aritmetica non è definita. Qualsiasi espressione che verifica l'uguaglianza tra un valore e System.Double.NaN restituisce falsesempre . Qualsiasi espressione che verifica la disuguaglianza (!= in C#) tra un valore e System.Double.NaN restituisce truesempre .

Come correggere le violazioni

Per correggere una violazione di questa regola e determinare in modo accurato se un valore rappresenta System.Double.NaN, usare System.Single.IsNaN o System.Double.IsNaN testare il valore.

Quando eliminare gli avvisi

Non escludere un avviso da questa regola.

Esempio

Nell'esempio seguente vengono illustrate due espressioni che testano erroneamente un valore su System.Double.NaN e un'espressione che usa System.Double.IsNaN correttamente per testare il valore.

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