Il linguaggio C# offre un supporto decisamente migliore dei Nullable Types rispetto a VB .NET. Nonostante ciò, utilizzando gli operatori di confronto su un tipo Nullable, es. un intero, il risultato è a dir poco strano e può dar luogo a bug piuttosto subdoli.
Infatti, eseguendo il seguente codice:
int? a;
int? b;
a=null;
b=null;
Debug.WriteLine(a == b);
Debug.WriteLine(a != b);
l'uguaglianza dei due tipi nullable con entrambe le variabili impostate a null dà come risultato "true", mentre l'operatore di disuguaglianza sulle stesse variabili produce come risultato "false". Sin qui il comportamento è coerente.
Questo codice invece:
Debug.WriteLine(a >= b);
Debug.WriteLine(a <= b);
produce in entrambi i casi un risultato pari a "false", risultato a prima vista strano, oserei quasi dire illogico.
In sostanza:
- "a" è uguale a "b", ma "a" non è maggiore "oppure" uguale a "b".
- "a" è uguale a "b", ma "a" non è minore "oppure" uguale a "b"
I commenti sono aperti.