web-dev-qa-db-fra.com

Recréation d'un dictionnaire à partir d'un IEnumerable <KeyValuePair <>>

J'ai une méthode qui retourne un IEnumerable<KeyValuePair<string, ArrayList>>, mais certains appelants exigent que le résultat de la méthode soit un dictionnaire. Comment puis-je convertir le IEnumerable<KeyValuePair<string, ArrayList>> dans une Dictionary<string, ArrayList> afin que je puisse utiliser TryGetValue?

méthode:

public IEnumerable<KeyValuePair<string, ArrayList>> GetComponents()
{
  // ...
  yield return new KeyValuePair<string, ArrayList>(t.Name, controlInformation);
}

votre interlocuteur:

Dictionary<string, ArrayList> actual = target.GetComponents();
actual.ContainsKey("something");
162
learnerplates

Si vous utilisez .NET 3.5 ou .NET 4, il est facile de créer le dictionnaire à l'aide de LINQ:

Dictionary<string, ArrayList> result = target.GetComponents()
                                      .ToDictionary(x => x.Key, x => x.Value);

Il n'y a rien de tel qu'un IEnumerable<T1, T2> mais un KeyValuePair<TKey, TValue> c'est bien.

304
Jon Skeet