任何人都不会知道如何迭代过一个通用名单,如果这种类型的名单是不知道直到运行时?

例如,假设 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中是这样。

如果列表中的对象实现了特定的接口,则可以完成同样的事情。这样,只要它们实现了接口,就可以使用任何对象类型填充列表,迭代方法只能处理对象类型之间的公共值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top