У мене є умова програми Silverlight, яка порівнює 2 рядки, чомусь коли я використовую, ==вона повертає помилку, а .Equals()повертає істину .
Ось код:
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
// Execute code
}
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
// Execute code
}
Будь-яка причина, чому це відбувається?
==, але оператори не є поліморфними. У цьому коді ==оператор викликається на тип object, який робить порівняння ідентичності замість значення.
==перевантаження на основі типу часу компіляції операндів. ContentВластивість object. Оператори не є віртуальними, тому реалізація за замовчуванням ==викликається, даючи порівняльне порівняння порівняння. При рівності виклик переходить до віртуального методу object.Equals(object); stringпереосмислює цей метод і виконує порядкове порівняння за вмістом рядка. Див. Msdn.microsoft.com/en-us/library/fkfd9eh8(v=vs.110).aspx та referenceources.microsoft.com/#mscorlib/system/string.cs,507 .
==має тип часу компіляції, objectа правий має тип часу компіляції string, тоді компілятор C # повинен вибрати (в даному випадку проблематичне) перевантаження operator ==(object, object); але він буде видавати попередження у час компіляції , що це може бути непередбачені. Тож читайте попередження про час збирання! Щоб виправити проблему та використовувати її ==, відведіть ліву частину до string. Якщо я пам'ятаю правильно, текст попередження говорить саме про це.
