Преобразовать общий словарь в другой тип - PullRequest
12 голосов
/ 31 марта 2009

Существует ли быстрый способ преобразования универсального словаря из одного типа в другой

У меня есть

IDictionary<string, string> _commands;

и нужно передать его в функцию, которая принимает несколько другой типизированный словарь

public void Handle(IDictionary<string, Object> _commands);

Ответы [ 4 ]

21 голосов
/ 31 марта 2009

Полагаю, я бы написал

Handle(_commands.ToDictionary(p => p.Key, p => (object)p.Value));

Не самая эффективная вещь в мире, чтобы сделать, но пока ковариация не наступит, это перерывы.

1 голос
/ 31 марта 2009

возможно эта функция может быть полезна для вас

IEnumerable<KeyValuePair<string, object>> Convert(IDictionary<string, string> dic) {
    foreach(var item in dic) {
        yield return new KeyValuePair<string, object>(item.Key, item.Value);
    }
}

И ты назовешь это так:

Handle(Convert(_commands));
0 голосов
/ 16 мая 2012

Не можете ли вы использовать

Dim myDictionary AS New Dictionary(Of Object, Object)

Это может принимать любые типы

0 голосов
/ 07 марта 2011

может что-то подобное сделать?

Dictionary<int, string> dict = new Dictionary<int, string>();

dict.Add(1, "One");
dict.Add(2, "Two");
dict.Add(3, "Three");
dict.Add(4, "Four");
dict.Add(5, "Five");

object dictObj = (object)dict;

IDictionary temp = (IDictionary)dictObj;

Dictionary<int, object> objs = new Dictionary<int, object>();

foreach (DictionaryEntry de in temp)
{
    objs.Add((int)de.Key, (object)de.Value);
}
...