Comment comparer les types nullables?

J’ai quelques endroits où je dois comparer 2 valeurs (nullables) pour voir si elles sont identiques.

Je pense qu’il devrait y avoir quelque chose dans le framework pour supporter cela, mais je ne trouve rien, alors voici:

public static bool IsDifferentTo(this bool? x, bool? y) { return (x.HasValue != y.HasValue) ? true : x.HasValue && x.Value != y.Value; } 

Ensuite, dans le code que j’ai if (x.IsDifferentTo(y)) ...

J’ai alors des méthodes similaires pour les ints nullables, les doubles nullables, etc.

N’y a-t-il pas un moyen plus facile de voir si deux types nullables sont les mêmes?

Mettre à jour:

Il s’avère que la raison de cette méthode était que le code a été converti à partir de VB.Net, où Nothing = Nothing renvoie false (comparé à C # où null == null renvoie true). Le code VB.Net aurait dû utiliser .Equals... place.

C # supporte les opérateurs “liftés”, donc si le type ( bool? Dans ce cas) est connu à la compilation, vous devriez juste pouvoir utiliser:

 return x != y; 

Si vous avez besoin de génériques, alors EqualityComparer.Default est votre ami:

 return !EqualityComparer.Default.Equals(x,y); 

Notez, cependant, que ces deux approches utilisent l’approche ” null == null ” (contrairement à ANSI SQL). Si vous avez besoin de ” null != null “, vous devrez le tester séparément:

 return x == null || x != y; 

Nullable.Equals ?

 if (x.Equals(y)) 

Vous pouvez utiliser la méthode statique Equals sur System.Object:

 var equal = object.Equals(objA, objB); 

Utilisez simplement == ou .Equals() .