Ich habe eine Bedingung in einer Silverlight - Anwendung , die zwei Strings vergleicht, aus irgendeinem Grund , wenn ich ==
es wieder falsch während .Equals()
kehrt wahr .
Hier ist der Code:
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
// Execute code
}
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
// Execute code
}
Gibt es einen Grund, warum dies geschieht?
==
, aber Operatoren sind nicht polymorph. In diesem Code wird der ==
Operator für den Typ aufgerufen object
, der einen Identitätsvergleich anstelle eines Werts eins durchführt.
==
Überladung basierend auf dem Typ der Operanden zur Kompilierungszeit. Das Content
Anwesen ist object
. Operatoren sind nicht virtuell, daher wird die Standardimplementierung von ==
aufgerufen, um einen Vergleich der Referenzgleichheit zu ermöglichen. Bei Equals geht der Aufruf an die virtuelle Methode object.Equals(object)
. string
überschreibt diese Methode und führt einen ordinalen Vergleich des Zeichenfolgeninhalts durch. Siehe msdn.microsoft.com/en-us/library/fkfd9eh8(v=vs.110).aspx und referencesource.microsoft.com/#mscorlib/system/string.cs,507 .
==
Typ object
zur Kompilierungszeit und die rechte Seite den Typ zur Kompilierungszeit hat . Es wird jedoch eine Warnung zur Kompilierungszeit ausgegeben, dass dies unbeabsichtigt sein könnte. So lesen Sie die Kompilierung-Warnungen! Um das Problem zu beheben und weiterhin zu verwenden , werfen Sie die linke Seite auf . Wenn ich mich richtig erinnere, schlägt der Warnungstext genau das vor. string
operator ==(object, object)
==
string