Конвертировать словарь в список <KeyValuePair>
Я знаю, что его можно преобразовать List of KeyValuePair в словарь, но есть ли быстрый способ (помимо циклического перехода вручную) для выполнения операции наоборот?
Это будет ручной способ,
foreach (KeyValuePair<double,double> p in dict)
{
list.Add(new KeyValuePair<double,double>(p.Key,p.Value));
}
Не так уж плохо, но мне было просто любопытно.
Ответы
Ответ 1
Чтобы преобразовать a Dictionary<TKey, TValue>
в List<KeyValuePair<TKey, TValue>>
, вы можете просто сказать
var list = dictionary.ToList();
или более подробный
var list = dictionary.ToList<KeyValuePair<TKey, TValue>>();
Это потому, что Dictionary<TKey, TValue>
реализует IEnumerable<KeyValuePair<TKey, TValue>>
.
Ответ 2
Использование linq:
myDict.ToList<KeyValuePair<double, double>>();
Элементы словаря - это элементы KeyValuePair
.
Ответ 3
Как сказал Джейсон. Но если вам действительно не нужен список, вы можете просто передать его в ICollection < TKey, TValue > потому что он реализует этот интерфейс, но некоторые части только явно. Этот метод работает лучше, потому что он не копирует весь список, просто повторно использует один и тот же экземпляр словаря.
Ответ 4
Для .NET 2.0:
Dictionary<TKey, TValue> dictionary = new Dictionary<TKey, TValue>();
List<KeyValuePair<TKey, TValue>> myList = new List<KeyValuePair<TKey, TValue>>(dictionary);
Ответ 5
Я пытаюсь перечислить экземпляр Exception.Data, который является IDictionary. Это то, что наконец-то сработало:
ICollection keys = idict.Keys;
foreach(var key in keys)
{
var value = idict[key];
Console.WriteLine("{0}: {1}", key, value);
}