我有繼承結構:Foo
實現IGraphNode
繼承IGraphItem
。爲什麼我要在這裏投兩倍?
Foo
,IGraphItem
/IGraphNode
,以及用於IGraphItem
/IGraphNode
所有實施駐留在單獨的組件。我正在使用控制容器的反轉,所以我正在參與的項目中有前兩個參考(Foo
和IGraphItem
和),但不是執行IGraphItem
/IGraphNode
。我也有Option Strict on,因爲它是這個項目所需要的(如果關閉沒有解決問題,轉向)。我使用.NET 3.5。
我身邊路過一個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
它。如果我錯了,它不應該讓我拋出異常嗎?有沒有更好的方法來完成我想要做的事情?
不知道發生了什麼事情,但它編譯和作品也運行。你得到什麼編譯器錯誤? –
@TimSchmelter:我得到'IGraphItem'類型的值不能轉換爲'Foo''錯誤。更新的問題添加,我正在使用.NET 3.5。 –
當我將目標框架更改爲3.5時,我得到了許多例外。但仍然沒有問題的投入項目(這是ob類型'IGraphNode')鍵入'Foo'。 –