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 false
sempre . Qualsiasi espressione che verifica la disuguaglianza (!=
in C#) tra un valore e System.Double.NaN restituisce true
sempre .
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));
}
}