无法约束泛型类型

本文关键字:泛型类型 约束 | 更新日期: 2023-09-27 18:11:25

我不知道这里发生了什么。我正在为Dictionary集合构建一个包装器。这个想法是,当集合的大小很小时,它将使用普通的内存字典;但是,当达到项的阈值数量时,它将在内部切换到磁盘上的字典(我使用的是ManagedEsent PersistentDictionary类)。

下面是磁盘版本的一个片段。编译时,它会失败,并显示以下错误:

"类型'T_KEY'不能用作类型参数'TKey'泛型类型或方法"Microsoft.Isam.Esent.Collections.Generic.PersistentDictionary'。"

所以我将类定义修改为:

class DiskDictionary<T_KEY, T_VALUE> : IHybridDictionary<T_KEY, T_VALUE>
    where T_KEY : System.IComparable

认为这能奏效,但没有。我试着约束定义IHybridDictionary,但没有任何效果。有什么想法吗?

DiskDictionary的原始定义:

class DiskDictionary<T_KEY, T_VALUE> : IHybridDictionary<T_KEY, T_VALUE>
{
    string dir;
    PersistentDictionary<T_KEY, T_VALUE> d;
    public DiskDictionary(string dir)
    {
        this.dir = dir;
        //d = new PersistentDictionary<T_KEY, T_VALUE>(dir);
    }
    ... some other methods...
}

无法约束泛型类型

您的DiskDictionary类需要指定T_KEY实现IComparable<TKey>:

class DiskDictionary<T_KEY, T_VALUE> : IHybridDictionary<T_KEY, T_VALUE>
    where T_KEY : System.IComparable<T_KEY>
{
}

这个接口有一个泛型和一个非泛型版本,你指定的是错误的。