C# Unterschied zwischen == und Equals()

Ich habe eine Bedingung in einer silverlight-Anwendung, vergleicht 2 strings, aus irgendeinem Grund, wenn ich == es gibt false während .Equals() gibt wahr.

Hier ist der code:

if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
    //Execute code
}

if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
    //Execute code
}

Irgendeinem Grund, warum dies passiert ist?

Siehe auch: stackoverflow.com/questions/144530/or-equals
String überschreibt ==, aber die Betreiber sind nicht polymorph. In diesem code, der == operator aufgerufen wird geben Sie object, die Identität-Vergleich statt einem Wert eine.
Erweitern @DrewNoakes' Bemerkung: Der compiler wählt eine == überlastung basierend auf der compile-Zeit-Typ der Operanden. Die Content Eigenschaft ist object. Die Betreiber sind nicht virtuell, so dass die default-Implementierung von == genannt, was einen Verweis Geschlechter-Vergleich. Mit ist Gleich der Aufruf der virtuellen Methode object.Equals(object); string überschreibt diese Methode und führt einen ordinalvergleich auf den string-Inhalt. Siehe msdn.microsoft.com/en-us/library/fkfd9eh8(v=vs. 110).aspx und referencesource.microsoft.com/#mscorlib/system/string.cs,507.
Erklärung ist präzise. Es sollte angemerkt werden, dass, wenn die linke Seite des == hat compile-Zeit-Typ object und der rechten Seite hat compile-Zeit-Typ string, dann den C# - compiler Holen müssen (problematisch, in diesem Fall) überlast -operator ==(object, object); aber es Problem während der Kompilierung eine Warnung, dass es sein könnte, ungewollt. So ist Lesen die compile-Zeit-Warnungen! Um das Problem zu lösen und trotzdem ==, warf der linken Seite, um string. Wenn ich mich richtig erinnere, den text der Warnung schlägt vor, dass nur.
für die Ratschläge zu Lesen, dass der compiler Warnungen. Noch besser: schalten Sie die Warnungen-wie-Fehler-option um zu erzwingen, dass jeder Aufmerksamkeit auf Sie zu bezahlen.

InformationsquelleAutor Drahcir | 2009-05-02

Schreibe einen Kommentar