【问题标题】:Unable to constrain generic type无法约束泛型类型
【发布时间】:2011-10-14 08:52:08
【问题描述】:

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

磁盘版本的 sn-p 如下。编译时失败并出现以下错误:

“类型‘T_KEY’不能作为类型参数‘TKey’在 泛型类型或方法 'Microsoft.Isam.Esent.Collections.Generic.PersistentDictionary'。 没有装箱转换或类型参数转换 'T_KEY' 到 'System.IComparable'。"

所以我将类定义修改为:

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

【问题讨论】:

    标签: c# generics collections constraints


    【解决方案1】:

    您的DiskDictionary 类需要指定T_KEY 实现IComparable&lt;TKey&gt;

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

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

    【讨论】:

    • 啊,非常感谢。我最初尝试过,但没有成功,但我没有通过其他类定义传播它。
    猜你喜欢
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    相关资源
    最近更新 更多