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 Contentproperti object. Operator tidak virtual, sehingga implementasi standar ==disebut, memberikan referensi kesetaraan referensi. Dengan Equals, panggilan masuk ke metode virtual object.Equals(object); stringmengganti 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 objectdan 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.
