web-dev-qa-db-fra.com

Convertir le dictionnaire en liste <KeyValuePair>

Je sais qu'il est possible de convertir une liste de KeyValuePair en dictionnaire, mais existe-t-il un moyen rapide (en plus de boucler manuellement) pour effectuer l'opération vice versa?

Ce serait la manière manuelle,

foreach (KeyValuePair<double,double> p in dict)
{
    list.Add(new KeyValuePair<double,double>(p.Key,p.Value));
}

Pas vraiment si mal mais j'étais simplement curieux.

47
Sean

Pour convertir un Dictionary<TKey, TValue> à un List<KeyValuePair<TKey, TValue>> tu peux juste dire

var list = dictionary.ToList();

ou le plus bavard

var list = dictionary.ToList<KeyValuePair<TKey, TValue>>();

Ceci est dû au fait Dictionary<TKey, TValue> met en oeuvre IEnumerable<KeyValuePair<TKey, TValue>>.

110
jason

Utilisation de linq:

myDict.ToList<KeyValuePair<double, double>>();

Éléments du dictionnaire sontKeyValuePair éléments.

8
Oded

Comme l'a dit Jason. Mais si vous n'avez pas vraiment besoin d'une liste, vous pouvez simplement la convertir en une ICollection <TKey, TValue> car elle implémente cette interface, mais certaines parties uniquement de manière explicite. Cette méthode fonctionne mieux car elle ne copie pas la liste entière, réutilise simplement la même instance de dictionnaire.

5
fejesjoco

J'ai essayé d'énumérer une instance d'Exception.Data qui est un IDictionary. C'est ce qui a finalement fonctionné:

    ICollection keys = idict.Keys;
    foreach(var key in keys)
    {
       var value = idict[key];
       Console.WriteLine("{0}: {1}", key, value);
    }
0
Schwarrior

Pour .NET 2.0:

Dictionary<TKey, TValue> dictionary = new Dictionary<TKey, TValue>();
List<KeyValuePair<TKey, TValue>> myList = new List<KeyValuePair<TKey, TValue>>(dictionary);
0
Daniel Bogdan