VB.NET嵌套泛型参数

VB.NET嵌套泛型参数,.net,vb.net,generics,.net,Vb.net,Generics,我正在尝试编写一个适配器类,它接受任何字典/键值对-ish类型作为参数 Public Class Adapter(Of TKey As IComparable, TValue, TContainer As {IDictionary, New}) Private Structure Entry Public Value as TValue ' Some other stuff End Property Private _Container

我正在尝试编写一个适配器类,它接受任何
字典
/
键值对
-ish类型作为参数

Public Class Adapter(Of TKey As IComparable, TValue, TContainer As {IDictionary, New})
    Private Structure Entry
        Public Value as TValue
        ' Some other stuff
    End Property

    Private _Container As TContainer(Of TKey, Entry) ' <-- how do I make TContainer still parametrizable

    Public Sub New()
        _Container = New TContainer(Of TKey, Entry) ' <-- TContainer needs to be New-able
    End Sub
End Class

我看到这种情况的唯一方法是将
条目
公开,然后我必须做一些类似
适配器的事情(字符串、字符串、适配器(你在这里做什么).Entry
。如果我不能完成泛型
适配器
签名,我如何引用内部
Entry
类?

我假设您已经知道
适配器(TKey作为IComparable,TValue,TContainer作为{IDictionary(TKey,TValue),New})
Dim Adapter作为适配器(字符串,字符串,字典(关于字符串,字符串))
,但要删除冗余的
(关于字符串,字符串)
?@GSerg我的问题是内部
条目
类,如果我将
TContainer
定义为
TContainer作为{IDictionary(关于TKey,TValue),新的}/code>我就不能再将
私有容器作为TContainer(关于TKey,Entry)
因为
TContainer
不再是可参数化的。我想我基本上是在问.NET领域是否存在模板参数(来自C++)(不太熟悉泛型术语)。我不认为您可以这样做,至少在不公开
条目
类的情况下是这样。但是为了公开
条目
,您需要将其移出
适配器
,否则将无法从外部引用其类型,因为您首先需要详细说明
适配器
的通用参数,一个nd
条目
将是其中之一,这是一个循环依赖项。您真的必须为
IDictionary
提供一个具体类型吗?看起来您总是可以在
适配器
内部创建一个
字典
。很难理解为什么需要将TContainer指定为泛型类型参数。这个类是否公开了
\u容器
?正如@GSerg所说,您需要使
条目
类型在类之外可访问;您可以使它实现一个可访问的接口类型,并将该接口用作泛型约束。@TnTinMn我能想到的唯一原因是有自定义泛型存储评估副作用,调用方希望确保
Adapter
为其副作用实例化特定类型的存储,即使
Adapter
本身只会看到它的
IDictionary
一面。在不公开
Entry
的情况下,我相信只能通过将所需类型的名称作为strin传递来完成g到
适配器的构造函数,然后,但是我不确定VB是否有方法来表示
类型的(MyClass)
Dim adapter As Adapter(Of String, String, Dictionary) ' <-- _Container will then be Dictionary(String, Entry(Of String))
Public Sub New(ByVal container As TContainer(Of TKey, Entry)) '<-- use existing container
    _Container = container
End Sub