2017-06-22 4 views
0

J'ai un dictionnaire concurrent imbriquée comme indiqué ci-dessous:Comment obtenir des valeurs dans la liste de dictionnaire simultanée imbriqué dans C#

ConcurrentDictionary<string,ConcurrentDictionary<string,<Class Object>>> 

Je veux tous les objets (valeurs de dictionnaire intérieur) dans la liste pour un traitement ultérieur sans connaître une clé

J'ai essayé deux solutions ci-dessous, mais il ne fonctionne pas pour moi,

  1. extérieur dictionary.Values.Select(x=> x.Values)
  2. foreach boucle

Le problème avec la première solution est qu'il ne donnera pas seulement des objets et la deuxième solution prend du temps.

+2

Pourriez-vous [modifier] et montrer votre boucle 'foreach' pour voir pourquoi il est temps? – dasblinkenlight

+0

Utilisez 'SelectMany' au lieu de simplement' Select'. https://stackoverflow.com/questions/958949/difference-between-select-and-selectmany – apocalypse

Répondre

1

Si vous exécutez dictionary.Values.Select(x=> x.Values), vous n'obtiendrez pas une liste de valeurs d'objet à partir des dictionnaires internes; vous obtiendrez une liste des listes des valeurs d'objet.

Pour « aplatir » cette liste, utilisez SelectMany:

foreach (var inner in dictionary.Values.SelectMany(x=> x.Values)) { 
    ... 
}