簡體   English   中英

無法限制通用類型

[英]Unable to constrain generic type

我不知道這里發生了什么。 我正在為Dictionary集合構建包裝器。 這個想法是,當集合的大小很小時,它將使用普通的內存字典; 但是,當達到項目的閾值數量時,它將在內部切換到磁盤上的Dictionary(我使用的是ManagedEsent PersistentDictionary類)。

下面是磁盤版本的片段。 編譯時,它失敗並顯示以下錯誤:

“類型'T_KEY'不能用作通用類型或方法'Microsoft.Isam.Esent.Collections.Generic.PersistentDictionary <TKey,TValue>'中的類型參數'TKey'。沒有裝箱轉換或類型參數轉換從“ 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...
}

您的DiskDictionary類需要指定T_KEY實現IComparable<TKey>

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

該接口既有通用版本又有非通用版本,您指定的是錯誤的版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM