これらの定義で関数 Import を実装したいクラスがあります:
1. Public Sub Import(of T)(ByRef Data() as T)
2. Public Sub Import(of T)(ByRef Data(,) as T)
3. Public Sub Import(of T)(ByRef Data()() as T)
4. Public Sub Import(of T)(ByRef Data as List(Of T))
5. Public Sub Import(of T)(ByRef Data as List(Of T()))
6. Public Sub Import(of T)(ByRef Data as List(Of List(Of T)))
7. Public Sub Import(of T)(ByRef Data() as List(Of T))
私の問題は、私が書いたときにコンパイラが正しいインポート関数を決定できないことです:
Dim ArrayList as List(of String)() = something
MyClass.Import(ArrayList)
1 と 7 は同じものを表すことができるので、その理由がわかりました。
だから私は自分のクラスに書き込もうとしました:
Public Sub Import(Of T)(ByRef Data() As T)
Try
Select Case True
Case Data(0).GetType().IsArray
ImportArrayArrayT(Data)
Case Data(0).GetType.IsGenericType
ImportArrayListT(Data)
Case Else
ImportArrayT(Data)
End Select
Catch ex As Exception
End Try
End Sub
Protected Sub ImportArrayT(Of T)(ByRef Data() As T)
End Sub
Protected Sub ImportArrayArrayT(Of T)(ByRef Data As T()())
End Sub
Protected Sub ImportArrayListT(Of T)(ByRef Data() As List(Of T))
End Sub
しかしImportArrayArrayT(Data)
、 、ImportArrayListT(Data)
、および で別のエラーが発生しますImportArrayT(Data)
。メッセージ エラーは、メソッドのパラメーターからデータの型を推測できないことを示しています。
タイプが String、Integer、Double のいずれであるかは気にしないため、ジェネリック タイプを使用する必要がありますが、Array、List、またはそれらの組み合わせ (2D max) の場合は別のコードが必要です。
私の問題を解決するアイデアはありますか?各タイプ (文字列、整数など) およびリストと配列の組み合わせに対して Import 関数をコーディングすることはしません。
ありがとう