2011-06-30 13 views
2

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」でメソッドのパラメータは定義されていないためですが、定義する方法や場所がわかりません。私はジェネリックメソッド定義を持つことが大丈夫だと思った。誰にもアイデアはありますか? おかげ

+0

サイドノード: 'GenericParamMap'がこれの正しい名前であるかどうかはわかりません。 A * map *は通常キーを値にマップするので、 'List(Of ...)'は個々のエントリではなく* map *と呼ばれることがあります。 'GenericParamMap'は、*タプル*なので、それを' GenericTuple'または 'GenericParamMapEntry'と呼ぶかもしれません。 – Heinzi

答えて

1

私はあなたが以下のような一般的な方法を使用しなければならないと思う:

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

をしかし、あなたは、このような文字列、整数と同時に、異なるタイプのためにあなたの方法を使用することはできません...

3

GenericParamMapの異なるインスタンスが共通のベース(Objectを除く)を共有しないため、コードが機能しません。つまり、Thing(Of Integer)はVBに関してはThing(Of String)とは全く関係ありません。

これを解決する1つの方法は、クラスにインターフェイスを実装する(または基本クラスを拡張する)こと、そしてリストをList(Of ThatInterface)と宣言することです。 のようにジェネリック型の情報を失うことに注意してください。しかし、基本的にはこの方法はありません。単純に整数と文字列を同じにすることはできません(共通の基本クラスがある場合を除いて、Object)。 Thing(Of Integer)Thing(Of String)も同様に処理することはできません。

関連する問題