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

Ste*_*eve 1 .net vb.net list

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

ListObject.AddDistinct("value")
Run Code Online (Sandbox Code Playgroud)

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

List(Of Integer)
List(Of String) 
Run Code Online (Sandbox Code Playgroud)

等我的扩展是

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
Run Code Online (Sandbox Code Playgroud)

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

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

Bol*_*ock 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
Run Code Online (Sandbox Code Playgroud)