2010-05-28 4 views
6

J'ai un type enum défini: EnumType Maintenant, imaginezComparer deux objets qui contiennent des valeurs enum du même type ENUM

object A = EnumType.Value1; 
object B = EnumType.Value2; 

Je voudrais faire la comparaison (A == B) me donner le bon résultat indépendant du type d'Enum utilisé. Dans la comparaison, l'objet contiendra toujours des énumérations, et les deux seront du même type.

Comment puis-je y parvenir?

Répondre

4

There is a good article on MSDN on when to use == and when to use Equals.

Fondamentalement, il existe 2 types d'égalité: égalité de référence et l'égalité de valeur. Si 2 objets ont une égalité de référence, ils ont donc aussi une valeur égale (les deux références pointent sur le même objet, donc bien sûr leurs valeurs sont les mêmes).

Le contraire, (et dans votre cas) n'est pas toujours vrai cependant. Si 2 objets ont une valeur égale, ils n'ont pas nécessairement l'égalité de référence. Dans votre cas == agit comme égalité de référence.

  • Habituellement ce que vous voulez est Equals, il est une méthode virtuelle définie dans System.Object.

  • Ce que vous ne voulez généralement pas pour les types de référence est ==, il compare généralement si deux références se réfèrent au même objet.

Dans votre cas A et B sont coincés dans 2 objets différents. A se réfère à la première et B se réfère à la seconde. == teste et voit que les deux sont referring à des choses différentes.

+0

La comparaison Enum produirait-elle une exception? Si oui, alors quelle serait sa solution? –

3

Il suffit d'utiliser A.Equals(B), il appellera le type interne égal.

Dans votre cas, vous ne pouvez pas utiliser == car A et B sont encadrés dans 2 objets différents.