Je veux juste obtenir une liste des valeurs du dictionnaire, mais ce n'est pas si simple qu'il y paraît!
voici le code:
Dictionary<string, List<MyType>> myDico = GetDictionary();
List<MyType> items = ???
J'essaie :
List<MyType> items = new List<MyType>(myDico.values)
Mais ça ne marche pas :-(
Bien entendu, myFico.Values est List<List<MyType>>
.
Utilisez Linq si vous voulez aplatir vos listes
var items = myDico.SelectMany (d => d.Value).ToList();
Que diriez-vous:
var values = myDico.Values.ToList();
Une autre variante:
List<MyType> items = new List<MyType>();
items.AddRange(myDico.values);
Vous voudrez probablement aplatir toutes les listes de Values
en une seule liste:
List<MyType> allItems = myDico.Values.SelectMany(c => c).ToList();
Mon OneLiner:
var MyList = new List<MyType>(MyDico.Values);
Pour aller plus loin dans la réponse de Slaks, si une ou plusieurs listes de votre dictionnaire sont nulles, un System.NullReferenceException
Sera lancé lors de l'appel de ToList()
, jouez en toute sécurité:
List<MyType> allItems = myDico.Values.Where(x => x != null).SelectMany(x => x).ToList();
Dictionary<string, MyType> myDico = GetDictionary();
var items = myDico.Select(d=> d.Value).ToList();
Utilisez ceci:
List<MyType> items = new List<MyType>()
foreach(var value in myDico.Values)
items.AddRange(value);
Le problème est que chaque clé de votre dictionnaire a une liste d'instances comme valeur. Votre code fonctionnerait si chaque clé avait exactement une instance comme valeur, comme dans l'exemple suivant:
Dictionary<string, MyType> myDico = GetDictionary();
List<MyType> items = new List<MyType>(myDico.Values);
Une autre variante que vous pourriez aussi utiliser
MyType[] Temp = new MyType[myDico.Count];
myDico.Values.CopyTo(Temp, 0);
List<MyType> items = Temp.ToList();
List<String> objListColor = new List<String>() { "Red", "Blue", "Green", "Yellow" };
List<String> objListDirection = new List<String>() { "East", "West", "North", "South" };
Dictionary<String, List<String>> objDicRes = new Dictionary<String, List<String>>();
objDicRes.Add("Color", objListColor);
objDicRes.Add("Direction", objListDirection);