如果在运行时之前不知道该列表的类型,是否有人知道如何迭代通用列表?
例如,假设obj1
作为Object
传递给函数:
Dim t As Type = obj1.GetType
If t.IsGenericType Then
Dim typeParameters() As Type = t.GetGenericArguments()
Dim typeParam As Type = typeParameters(0)
End If
如果obj
作为List(Of String)
传递,那么使用上面的内容我可以确定传递了一个通用列表(t
),它的类型为String
({ {1}})。我知道我假设只有一个通用参数,但这对于这个简单的例子来说很好。
我想知道的是,基于以上所述,我该如何做这样的事情:
typeParam
甚至可以像获取For Each item As typeParam In obj1
'do something with it here
Next
一样简单。
答案 0 :(得分:2)
迭代列表的方法可以指定泛型类型:
Public Sub Foo(Of T)(list As List(Of T))
For Each obj As T In list
..do something with obj..
Next
End Sub
那么你可以打电话:
Dim list As New List(Of String)
Foo(Of String)(list)
这种方法使代码看起来有点毛茸茸,至少在VB.NET中是这样。
如果列表中的对象实现了特定的接口,则可以完成同样的事情。这样,只要它们实现了接口,就可以使用任何对象类型填充列表,迭代方法只能处理对象类型之间的公共值。
答案 1 :(得分:1)
如果您知道obj是Generic List。那你很幸运。
通用列表实现IList和IEnumerable(两者都是非泛型的)。所以你可以转换到其中任何一个接口,然后转换为For Each。