Ben kullandığınızda nedense 2 dizeleri karşılaştıran bir Silverlight uygulamasında bir şartım var ==döndürür false iken .Equals()döner doğrudur .
İşte kod:
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
// Execute code
}
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
// Execute code
}
Bunun neden olduğuna dair bir sebep var mı?
==, ancak işleçler polimorfik değildir. Bu kodda, ==işleç, objectbir değer yerine kimlik karşılaştırması yapan türde çağrılır .
==, işlenenlerin derleme zamanı türüne göre bir aşırı yük seçer . ContentÖzelliktir object. İşleçler sanal değildir, bu nedenle varsayılan ==eşit uygulaması çağrılır ve referans eşitliği karşılaştırması sağlanır. Eşittir ile çağrı sanal yönteme gider object.Equals(object); stringbu yöntemi geçersiz kılar ve dize içeriği üzerinde sıralı bir karşılaştırma yapar. Bkz. Msdn.microsoft.com/en-us/library/fkfd9eh8(v=vs.110).aspx ve referenceource.microsoft.com/#mscorlib/system/string.cs,507 .
==derleme zamanı türü objectve sağ tarafın derleme zamanı türü olduğunda string, C # derleyicisi (bu durumda sorunlu) aşırı yükü seçmelidir operator ==(object, object); ama olacak o da kasıtlı olmayan edilebileceğini derleme zamanı uyarıda. Yani okunan derleme zamanı uyarıları! Sorunu çözmek ve hala kullanmak ==için sol tarafı şuraya yayınlayın string. Doğru hatırlarsam, uyarı metni bunu önerir.
