Saya memiliki kondisi dalam aplikasi silverlight yang membandingkan 2 string, untuk beberapa alasan ketika saya menggunakannya ==
mengembalikan false sementara .Equals()
mengembalikan true .
Ini kodenya:
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
// Execute code
}
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
// Execute code
}
Ada alasan mengapa ini terjadi?
==
, tetapi operator tidak polimorfik. Dalam kode ini, ==
operator dipanggil pada tipe object
, yang melakukan perbandingan identitas daripada nilai satu.
==
kelebihan berdasarkan pada jenis waktu kompilasi operan. The Content
properti object
. Operator tidak virtual, sehingga implementasi standar ==
disebut, memberikan referensi kesetaraan referensi. Dengan Equals, panggilan masuk ke metode virtual object.Equals(object)
; string
mengganti metode ini dan melakukan perbandingan ordinal pada konten string. Lihat msdn.microsoft.com/en-us/library/fkfd9eh8(v=vs.110).aspx dan referenceource.microsoft.com/#mscorlib/system/string.cs,507 .
==
memiliki tipe waktu kompilasi object
dan sisi kanan memiliki tipe waktu kompilasi string
, maka kompiler C # harus memilih (bermasalah, dalam hal ini) kelebihan beban operator ==(object, object)
; tetapi itu akan mengeluarkan peringatan waktu kompilasi bahwa itu mungkin tidak disengaja. Jadi baca peringatan waktu kompilasi! Untuk memperbaiki masalah ini dan masih menggunakan ==
, masukkan sisi kiri ke string
. Jika saya ingat dengan benar, teks peringatan menyarankan hal itu.