我想使用一個變量,它只是一個字符串列表的列表。 我如下聲明它:是否可以使用IList(Of IList(Of String))?
Dim iRows As New List(Of List(Of String))
然後我試圖把它作爲參數傳遞給另一個方法,我已經定義如下方法:
Public Sub Import(ByVal Rows As IList(Of IList(Of String)))
For Each Row As IList(Of String) In Rows
ImportRow(Row)
Next
End Sub
不幸的是,當我嘗試運行該代碼,當它試圖將我的變量傳遞給我的方法時,出現以下錯誤。
System.InvalidCastException了未處理由用戶代碼 消息=「無法轉換類型的對象 'System.Collections.Generic.List 1[System.Collections.Generic.List
1 [System.String]]' 爲類型「System.Collections.Generic.IList 1[System.Collections.Generic.IList
1 [System.String]]」「。
當我改變方法定義使用類型而不是接口如下,它的工作原理。
Public Sub Import(ByVal Rows As List(Of List(Of String)))
For Each Row As IList(Of String) In Rows
ImportRow(Row)
Next
End Sub
那麼,以這種方式使用泛型與接口是不可能的嗎?只要我沒有嵌套它們,它就可以正常工作。
這一切都有道理。謝謝。 –
這真是太糟糕了微軟沒有爲IList實現IReadableList基類型,因爲IReadableList(Of Apple)可以被期待IReadableList(Of Fruit)的代碼使用。不過,現在可能需要一些非常討厭的運行時黑客來實現這樣的事情,而不會破壞現有的代碼。 – supercat
@supercat:是的 - 它會很有用。這很棘手 - 接口過多分解會導致混淆,但是太少導致這種事情:( –