В VisualStudio (Pro 2008) я только что заметил некоторое противоречивое поведение и подумал, есть ли за этим логическое обоснование
В проекте WinForms, если я использую строку
if(myComboBox.Items[i] == myObject)
Я получаю предупреждение компилятора, что я могу получить «Возможные непреднамеренные ссылки», когда я сравниваю объект типа с типом MyObject. Достаточно справедливо.
Однако, если я вместо этого использую интерфейс для сравнения:
if(myComboBox.Items[i] == iMyInterface)
предупреждение о компиляции исчезает.
Может кто-нибудь подумать, есть ли логическая причина, по которой это должно происходить, или просто артефакт компилятора, чтобы не проверять интерфейсы для сравнения предупреждений. Есть мысли?
РЕДАКТИРОВАТЬ В моем примере комбинированный список был привязан к списку, но этот список был создан с использованием list<IMyInterface>.Cast<MyObject>().ToList<MyObject>()
Это похоже на то, как если бы компилятор только продолжал предполагать, что я привязан к списку IMyInterface.
(Методы объектов и интерфейсов были изменены для защиты невинных)