J'ai quelques endroits où j'ai besoin de comparer 2 valeurs (nullables), pour voir si elles sont identiques.
Je pense qu'il devrait y avoir quelque chose dans le cadre pour soutenir cela, mais je ne trouve rien, alors à la place, ayez les éléments suivants:
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, j'ai if (x.IsDifferentTo(y)) ...
J'ai ensuite des méthodes similaires pour les ints nullables, les doubles nullables, etc.
N'y a-t-il pas un moyen plus simple de voir si deux types nullables sont identiques?
Mise à jour:
Il s'avère que la raison pour laquelle cette méthode existait était parce que le code a été converti à partir de VB.Net, où Nothing = Nothing renvoie false (par rapport à C # où null == null renvoie true). Le code VB.Net aurait dû utiliser .Equals...
À la place.
C # prend en charge les opérateurs "levés", donc si le type (bool?
dans ce cas) est connu lors de la compilation, vous devriez juste pouvoir utiliser:
return x != y;
Si vous avez besoin de génériques, alors EqualityComparer<T>.Default
est votre ami:
return !EqualityComparer<T>.Default.Equals(x,y);
Notez, cependant, que ces deux approches utilisent le "null == null
"(contrairement à ANSI SQL). Si vous avez besoin de" null != null
"alors vous devrez tester cela séparément:
return x == null || x != y;
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()
.
Utilisez Comparer: