迭代通过的通用名单不明型号的运行时中VB.Net
-
06-07-2019 - |
题
任何人都不会知道如何迭代过一个通用名单,如果这种类型的名单是不知道直到运行时?
例如,假设 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
(typeParam
).我知道我犯了一个大假设,即只有一个通用的参数,但是,这很好,这个简单的例子。
我想知道的是,基于上述,我该怎么做事情是这样的:
For Each item As typeParam In obj1
'do something with it here
Next
甚至一些简单得 obj1.Count()
.
解决方案
如果你知道obj是 通用的清单.然后你很幸运。
通用名单实现IList和类型(两者都是非通用的).所以你可以投给这些接口,然后为每个超过了他们。
- IList有数财产。
- IList还有一个铸方法。如果你不知道的类型铸到,使用对象。这会给你一个综合(对象的),然后你可以开始使用皇宫的反对。
其他提示
迭代列表的方法可以指定泛型类型:
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中是这样。
如果列表中的对象实现了特定的接口,则可以完成同样的事情。这样,只要它们实现了接口,就可以使用任何对象类型填充列表,迭代方法只能处理对象类型之间的公共值。
不隶属于 StackOverflow