我有继承结构:Foo
实现IGraphNode
继承IGraphItem
。
Foo
, IGraphItem
/和/IGraphNode
的实现都位于单独的程序集中。我正在使用控制容器的反转,因此我正在处理的项目引用了前两个(和/ ),但没有/的实现。我还打开了 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
这样做。如果我错了,它不应该让我抛出异常吗?有没有更好的方法来完成我想要做的事情?