Как преобразовать универсальный словарь в неуниверсальный без перечисления? - PullRequest
8 голосов
/ 29 сентября 2008

Я хочу преобразовать экземпляр универсального IDictionary в не универсальный IDictionary . Могу ли я сделать это без создания нового экземпляра IDictionary ? Есть ли какие-либо рамки поддержки для этой задачи?

Я попытался обернуть универсальный IDictionary в класс, который реализует негенетический IDictionary, однако я обнаружил, что мне также нужно каким-то образом преобразовать универсальную ICollection в неуниверсальный, поэтому я использую решение Марка Гравелла.

1 Ответ

20 голосов
/ 29 сентября 2008

Все зависит от используемой реализации бетона .

Например, Dictionary реализует как универсальный IDictionary , так и неуниверсальный IDictionary - поэтому, если у вас есть Dictionary , вы можете использовать его как любой без проблем:

        Dictionary<int, string> lookup = new Dictionary<int,string>();
        IDictionary<int,string> typed = lookup;
        IDictionary untyped = lookup;

Однако это не обязательно относится ко всем имплементациям IDictionary , поскольку неверно, что IDictionary : IDictionary. Если вы глубоко в недрах какого-то общего кода, вы можете проверить текущий словарь:

        IDictionary<int,string> typed  = ...
        IDictionary untyped = typed as IDictionary;
        if(untyped == null) {/* create by enumeration */}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...