私は継承構造を持っています: Fooimplements IGraphNodeinherits IGraphItem。
Foo、IGraphItem/ 、および/IGraphNodeの実装はすべて別のアセンブリに存在します。私は制御コンテナーの反転を使用しているため、作業中のプロジェクトには最初の 2 つ (および/ ) への参照がありますが、 /の実装はありません。このプロジェクトに必要なため、Option Strict もオンにしています (オフにしても問題は解決しませんでした)。.NET 3.5 を使用しています。IGraphItemIGraphNodeFooIGraphItemIGraphNodeIGraphItemIGraphNode
私はIGraphItem周りを回っていて、次のようなコードがあります:
Public Sub ProcessItem(of IGraphItem)(item As IGraphItem)
If TypeOf item Is Foo Then
Dim f1 = CType(item, Foo) 'Compiler error
Dim f2 = DirectCast(item, Foo) 'Compiler error
'This is what I'm currently having to do. It works.
Dim f = CType(CType(item, IGraphNode), Foo)
'Do stuff
End If
End Sub
なぜ私はこれをしなければならないのですか?それが機能することを追加する必要がありますが、のタイプがでTryCastあることを確認したばかりなので、できない理由がわかりません。私が間違っている場合は、例外をスローさせてはいけませんか? 私がやろうとしていることを達成するためのより良い方法はありますか?itemFooDirectCast