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
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()
.
Utiliser la comparaison: