2010-05-28 2 views
6

У меня есть тип перечисления, определенный: EnumType Теперь представьтесравнения двух объектов, которые содержат значения перечислений одного и того же типа перечислений

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

Я хотел бы сделать сравнение (A == B) дать мне правильный независимо от типа используемого Enum. При сравнении объект всегда будет содержать перечисления, и оба будут одного типа.

Как я могу это достичь?

ответ

4

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

В основном есть 2 типа равенства: равенство ссылок и равенство значений. Если у 2 объектов есть ссылочное равенство, то поэтому они также имеют равенство значений (обе ссылки указывают на один и тот же объект, поэтому, конечно, их значения одинаковы).

Противоположность (и в вашем случае) не всегда истинна. Если 2 объекта имеют равенство значений, они не обязательно имеют ссылочное равенство. В вашем случае == действует как ссылочное равенство.

  • Обычно то, что вы хотите Equals, это виртуальный метод, определенный в System.Object.

  • То, что вы обычно не хотите для ссылочных типов, это ==, оно обычно сравнивает, ссылаются ли на две ссылки на один и тот же объект.

В вашем случае A и B зажаты в 2-х различных объектов. A относится к первому, а B относится ко второму. == проверяет и видит, что оба являются referring для разных вещей.

+0

Будет ли Enum сравнения бросков Exception? если да, то каково было бы его решение? –

3

Просто используйте A.Equals(B), он назовет внутренний тип равным.

В вашем случае вы не можете использовать ==, потому что A и B размещены в 2 разных предмета.

Смежные вопросы