2009-08-12 57 views
0

我有一个类似于下面的函数。我想修改它,所以我可以传入多种类型来过滤而不是一个。我不认为有类型参数的params/paramarray选项,是吗?有没有办法为泛型类型添加类似params选项的东西?

Public Shared Function Filter(Of T)() 
    Dim results As New List(Of T) 
    For Each item In GlobalCollection.All() 
     If GetType(T).IsAssignableFrom(item.GetType()) Then 
      results.Add(instance) 
     End If 
    Next 
    Return results.ToArray() 
End Function 

我希望能够调用它像:

Filter(Of Car) 

也喜欢:

Filter(Of Car, Truck, Boat) 
+0

为什么在世界上你将结果转换为数组?你应该为你的函数指定返回类型。 – 2009-08-12 19:12:12

+0

是的,那会是一个错字。我实际上正在返回一个Ienumerable(Of T) – adam0101 2009-08-12 19:59:04

回答

4

号,类型参数的数量是固定在编译时(对于泛型类型和方法)。但是,您可以通过类型参数的数量过载 - 因此您可以使用不同数量的类型参数来创建N个不同版本的方法。

(这有点像ActionAction(Of T)Action(Of T1, T2)等)

+0

我喜欢它,所以我可以传入任意数量的类型。 – adam0101 2009-08-12 19:30:21

+0

这只是不支持,恐怕。无论如何,我不能立即看到你的方法会被扩展到多种类型...... – 2009-08-12 19:36:25

1

你可以使功能看起来更像是这样的:

Public Shared Function Filter()(ByVal FilterTypes As IEnumerable(Of Type)) As IList(Of Object) 

但你不得不返回对象的集合。

更好的选择是为您的类型定义某种类型的继承结构(可能是接口)。所以你的“汽车”,“卡车”和“小船”类型都将实施或继承基础的“车辆”类型。

相关问题