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ç, object
bir 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)
; string
bu 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ü object
ve 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.