Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 创建泛型类型的泛型列表_.net_Vb.net_Generics - Fatal编程技术网

.net 创建泛型类型的泛型列表

.net 创建泛型类型的泛型列表,.net,vb.net,generics,.net,Vb.net,Generics,我正在尝试在vb.net 2.0框架中创建泛型类型的列表。 这是泛型类型定义: ---------- Public Class GenericParamMap(Of T) Public Sub New(ByVal pParamName As String, ByVal pPropValue As T) mParamName = pParamName mPropValue = pPropValue End Sub Public Propert

我正在尝试在vb.net 2.0框架中创建泛型类型的列表。 这是泛型类型定义:

----------
  Public Class GenericParamMap(Of T)

    Public Sub New(ByVal pParamName As String, ByVal pPropValue As T)
      mParamName = pParamName
      mPropValue = pPropValue
    End Sub

    Public Property ParamName() As String
      Get
        Return mParamName
      End Get
      Set(ByVal Value As String)
        mParamName = Value
      End Set
    End Property
    Private mParamName As String

    Public Property PropValue() As T
      Get
        Return mPropValue
      End Get
      Set(ByVal Value As T)
        mPropValue = Value
      End Set
    End Property
    Private mPropValue As T
  End Class
----------
下面是一个使用作为参数传入的GenericParamMap列表的方法:

Public Sub PopulateParamMap(ByVal pMap As List(Of GenericParamMap(Of T))
      pMap.Add(New GenericParamMap(Of Integer)("@region_id", RegionId))
      pMap.Add(New GenericParamMap(Of String)("@bus_addr1", BusAddress1))
      pMap.add(New GenericParamMap(Of Boolean)("@active_flag", ActiveFlag))
End Sub
----------
编译器不允许在方法的参数中使用“T”,因为它没有定义,但我不确定如何或在何处定义它。我认为有一个通用的方法定义是可以的。有人有什么想法吗?
谢谢

我认为您必须使用以下通用方法:

Public Sub PopulateParamMap(Of T)(ByVal pMap As List(Of GenericParamMap(Of T))
   pMap.Add(New GenericParamMap(Of T)("@region_id", RegionId))
End Sub

但是您不能同时对不同的类型(例如字符串、整数…)使用您的方法。

您的代码不起作用,因为
GenericParamMap
的不同实例不共享公共基(除了
对象
)。也就是说,就VB而言,
事物(整数)
事物(字符串)
完全无关


解决这个问题的一种方法是让您的类实现一个接口(或扩展一个基类),然后将您的列表声明为
list(该接口的)
。请注意,这样会丢失泛型类型信息,但根本没有办法解决这一问题–整数和字符串不能相同(除了它们的公共基类,即
Object
),因此也不能处理
Thing(Of Integer)
Thing(Of String)
类似。

作为一个侧节点:我不确定
GenericParamMap
是否是正确的名称。映射通常将键映射到值,因此您的
列表(Of…
可以称为映射,而不是单个条目。您所描述的
GenericParamMap
只是一个元组,因此您可以将其称为
GenericTuple
genericparammaptentry