【发布时间】:2012-09-09 00:50:09
【问题描述】:
我有一个类,我想用这些定义实现一个函数 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 或它们的组合(最大二维),我需要不同的代码。
那么您有什么想法可以解决我的问题吗?我不会为每个类型(字符串、整数、...)以及列表和数组的组合编写导入函数。
谢谢
【问题讨论】:
-
好像导入列表和导入单个元素是不同的操作,应该有不同的函数名。您还可以使用
IEnumerable<T>和IList<T>等接口来减少需要处理的类型数量。