Inconsistenza operatori di confronto dei Nullable Types in C#

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:

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.

Comments are closed.