Testare i valori NaN in modo corretto
Aggiornamento: novembre 2007
TypeName |
TestForNaNCorrectly |
CheckId |
CA2242 |
Categoria |
Microsoft.Usage |
Breaking Change |
Non sostanziale |
Causa
Un'espressione testa un valore in base a SingleNan() o a DoubleNan().
Descrizione della regola
Double.NaN, che rappresenta un valore non numerico, viene restituito quando un'operazione aritmetica non è definita. Le espressioni che testano l'uguaglianza tra un valore e Double.NaN restituiscono sempre false. Le espressioni che testano la disuguaglianza tra un valore e Double.NaN restituiscono sempre true.
Correzione di violazioni
Per risolvere una violazione di questa regola e determinare accuratamente se un valore rappresenta Double.NaN, testare il valore utilizzando SingleIsNan(Single) o DoubleIsNan(Double).
Esclusione di avvisi
Non escludere un avviso da questa regola.
Esempio
Nell'esempio riportato di seguito vengono illustrate due espressioni che erroneamente testano un valore in base a Double.NaN e un'espressione che utilizza correttamente Double.IsNaN per testare il valore.
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) );
}
}
}