64 votes

Comment comparer les types nullables?

J'ai un peu d'endroits où j'ai besoin de comparer 2 (nullable) des valeurs, pour voir si elles sont la même chose.

Je pense qu'il devrait être quelque chose dans le cadre de l'appui, mais ne peut pas trouver quoi que ce soit, de sorte qu'au lieu sont les suivantes:

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 ensuite des méthodes similaires pour nullable ints, nullable doubles etc.

N'est-il pas un moyen plus facile de voir si les deux types nullables sont les mêmes?

Mise à jour:

S'avère que la raison pour laquelle cette méthode qui existait était parce que le code a été converti à partir d'VB.Net où Rien = Rien retourne false (à comparer avec le C# où null == null renvoie la valeur true). L'VB.Net le code doit avoir utilisé .Equals... à la place.

76voto

Marc Gravell Points 482669

C# prend en charge "levé" opérateurs, de sorte que si le type (bool? dans ce cas) est connu à la compilation, vous devez juste être capable d'utiliser:

return x != y;

Si vous avez besoin de médicaments 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" approche (contrairement à la norme ANSI SQL). Si vous avez besoin d' "null != null", alors vous aurez à tester séparément:

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

39voto

Anton Gogolev Points 59794

Nullable.Equals<T>?

24voto

Kashif Points 3900
if (x.Equals(y)) 

6voto

Randy Minder Points 19262

L'Utilisation De Comparer:

http://msdn.microsoft.com/en-us/library/dxxt7t2a.aspx

5voto

Lucero Points 38928

Suffit d'utiliser ==ou .Equals().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X