VisualStudio (Pro 2008) で、いくつかの一貫性のない動作に気付き、その背後に論理的な理由があるかどうか疑問に思いました
WinForms プロジェクトで、次の行を使用すると
if(myComboBox.Items[i] == myObject)
オブジェクト型を MyObject 型と比較しているときに、「意図しない参照の可能性」が発生する可能性があるというコンパイラ警告が表示されます。けっこうだ。
ただし、代わりにインターフェイスを使用して比較すると、次のようになります。
if(myComboBox.Items[i] == iMyInterface)
コンパイル警告は消えます。
これが発生する論理的な理由があるのか 、それともコンパイラのアーティファクトで比較警告のインターフェイスをチェックしないのか、誰でも考えることができます。何かご意見は?
編集私の例では、コンボボックスはリストにバインドされていましたが、そのリストは次を使用して生成されましたlist<IMyInterface>.Cast<MyObject>().ToList<MyObject>()
あたかも私が IMyInterface のリストにバインドしていると仮定して、コンパイラはまだ取っているかのようです。
(無実を保護するために、オブジェクトとインターフェイスのメソッドが変更されました)