List(AnyType)的扩展类不起作用

时间:2011-08-26 11:55:21

标签: .net vb.net list

我想为List类型创建一个扩展类,以便用户可以

ListObject.AddDistinct("value")

我希望该方法适用于所有类型的列表,所以:

List(Of Integer)
List(Of String) 

等等。我的扩展名是

Module ListsExtensions
<Extension()>
Public Sub AddDistinct(ByRef ls As List(Of Type), ByVal obj As Type)
    If Not ls.Contains(obj) Then ls.Add(obj)
End Sub
End Module

我将它定义为Type并尝试了对象,但是当我有一个字符串列表时,它们都不可访问。

如果我将它设置为字符串然后出现..但我想要更通用的东西,并将适用于所有列表。我如何定义它?

1 个答案:

答案 0 :(得分:5)

List(Of AnyType)被称为泛型类。这是类如何适用于任何类型,但仍然是强类型而不是使用Object

为了使扩展方法成为通用的,你需要像这样声明泛型类型(我在这里使用T而不是Type来遵循.NET命名约定):

<Extension()>
Public Sub AddDistinct(Of T)(ByRef ls As List(Of T), ByVal obj As T)
    If Not ls.Contains(obj) Then ls.Add(obj)
End Sub