Невозможно ограничить универсальный тип - PullRequest
2 голосов
/ 14 октября 2011

Я не могу понять, что здесь происходит.Я создаю оболочку для коллекции Dictionary.Идея состоит в том, что, когда размер коллекции невелик, он будет использовать обычный словарь в памяти;но при достижении порогового числа элементов он будет внутренне переключаться на словарь на диске (я использую класс ManagedEsent PersistentDictionary).

Ниже приведен фрагмент версии на диске.При компиляции происходит сбой со следующей ошибкой:

"Тип '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...
}

1 Ответ

4 голосов
/ 14 октября 2011

Ваш класс DiskDictionary должен указать, что T_KEY реализует IComparable<TKey>:

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

Существует как универсальная, так и не универсальная версия этого интерфейса, и вы указали неправильную.

...