2010-05-28 1 views

Antwort

4

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

Grundsätzlich gibt es zwei Arten von Gleichheit: Referenz Gleichheit und Wertgleichheit. Wenn 2 Objekte eine Referenzgleichheit haben, haben sie daher auch eine Gleichheit (beide Referenzen zeigen auf das gleiche Objekt, so dass ihre Werte natürlich gleich sind).

Das Gegenteil (und in Ihrem Fall) ist jedoch nicht immer wahr. Wenn 2 Objekte Wertgleichheit haben, haben sie nicht notwendigerweise eine Referenzgleichheit. In Ihrem Fall handelt == als Referenzgleichheit.

  • der Regel, was Sie wollen, ist Equals, es ist eine virtuelle Methode in System.Object definiert ist.

  • Was Sie normalerweise nicht für Referenztypen möchten, ist ==, es vergleicht normalerweise, ob zwei Referenzen auf dasselbe Objekt verweisen.

In Ihrem Fall A und B sind in 2 verschiedenen Objekten eingerahmt. A bezieht sich auf die erste und B bezieht sich auf die zweite. == testet und sieht, dass beide referring zu verschiedenen Dingen sind.

+0

Würde Enum Vergleich Exception wirft? Wenn ja, was wäre dann seine Lösung? –

3

Verwenden Sie einfach A.Equals(B), wird es den inneren Typ gleich nennen.

In Ihrem Fall können Sie == nicht verwenden, da A und B in 2 verschiedenen Objekten eingerahmt sind.

Verwandte Themen