2010-05-28 14 views

Odpowiedz

4

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

Zasadniczo istnieją 2 rodzaje równości: równości i równości wartość odniesienia. Jeżeli 2 obiekty mają równości odniesienia one stąd dlatego też równość wartości (zarówno punkt odniesienia do tego samego obiektu, więc oczywiście ich wartości są takie same).

Przeciwne (w danym przypadku) nie zawsze jest prawdą, choć. Jeśli 2 obiekty mają równość wartości, niekoniecznie muszą mieć równość odniesienia. W twoim przypadku == działa jako równość odniesienia.

  • Zazwyczaj to, co chcesz Equals, jest to metoda wirtualna zdefiniowane w System.Object.

  • To, czego zwykle nie chce się dla typów referencyjnych, to ==, zwykle porównuje to, czy dwa odniesienia odnoszą się do tego samego obiektu.

W twoim przypadku A i B są zapakowane w 2 różnych obiektów. A odnosi się do pierwszego i B odnosi się do drugiego. == testuje i widząc, że obie są referring do różnych rzeczy.

+0

Czy porównanie Enum rzuca wyjątek? jeśli tak, jakie byłoby jego rozwiązanie? –

3

Wystarczy użyć A.Equals(B), to nazywamy typ wewnętrzny Równa.

W twoim przypadku nie można użyć == ponieważ A i B są zapakowane w 2 różnych obiektów.