私は継承構造を持っています: Foo
implements IGraphNode
inherits IGraphItem
。
Foo
、IGraphItem
/ 、および/IGraphNode
の実装はすべて別のアセンブリに存在します。私は制御コンテナーの反転を使用しているため、作業中のプロジェクトには最初の 2 つ (および/ ) への参照がありますが、 /の実装はありません。このプロジェクトに必要なため、Option Strict もオンにしています (オフにしても問題は解決しませんでした)。.NET 3.5 を使用しています。IGraphItem
IGraphNode
Foo
IGraphItem
IGraphNode
IGraphItem
IGraphNode
私は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
あることを確認したばかりなので、できない理由がわかりません。私が間違っている場合は、例外をスローさせてはいけませんか? 私がやろうとしていることを達成するためのより良い方法はありますか?item
Foo
DirectCast