私は単に文字列のリストのリストである変数を使用しようとしています。 次のように私はそれを宣言した: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
このように、インターフェイスでジェネリックを使用することはできませんか?私はそれらを入れ子にしていない限り、それは正常に動作します。このようなiRowsを宣言することによって
それはすべて今意味があります。ありがとうございました。 –
IReadableList(Of Apple)はIReadableList(Of Fruit)を想定したコードで使用できるため、マイクロソフトではIListのIReadableList基本型を実装していません。しかし、既存のコードを壊すことなく、今のところこのようなことを実装するために、おそらくかなり厄介なランタイム・ハッキングが必要になるでしょう。 – supercat
@supercat:はい、便利でした。それは難しいです - インターフェイスの分解が混乱の原因になりますが、あまりにもこの種のものにつながります。( –