无法约束泛型类型

时间:2011-10-14 00:37:13

标签: c# generics collections constraints

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

磁盘版本的片段如下。编译时,它失败并出现以下错误:

  

“类型'T_KEY'不能用作类型参数'TKey'   通用类型或方法   'Microsoft.Isam.Esent.Collections.Generic.PersistentDictionary< TKEY的,TValue>'。   没有装箱转换或类型参数转换   'T_KEY'到'System.IComparable< T_KEY>'。“

所以我将类定义修改为:

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...
}

1 个答案:

答案 0 :(得分:4)

您的DiskDictionary课程需要指定T_KEY实施IComparable<TKey>

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

此接口既有通用版本也有非泛型版本,您指定了错误的版本。