Question

Disons que j'ai une liste arbitray A

class A
{
string K {get;set;}
string V {get;set;}
}

...
List<A> theList = ...

Yat-il un moyen facile de composer un dictionnaire de theList? (Quelque chose comme ce qui suit)

Dictionary<string, string> dict = magic(x => x.K, x => x.V, theList)

Je ne veux pas écrire le code suivant:

var d = new Dictionary<string, string>
foreach(var blah in theList)
    d[blah.K] = blah.V
Était-ce utile?

La solution

Il y a ceci:. Enumerable.ToDictionary

Vous utilisez comme ceci:

Dictionary<string, string> dict = theList.ToDictionary(e => e.K, e => e.V);

Autres conseils

Si la liste est un IEnumerable<A> alors très certainement. Vous utilisez la méthode d'extension de ToDictionary sur la classe Enumerable dans l'espace de noms System.Linq dans .NET 3.5 et au-delà comme ceci:

Dictionary<string, string> d = theList.ToDictionary(a => a.K, a => a.V);

Ce qui vous donnera un dictionnaire où la clé est la valeur de la propriété K, et la valeur est la valeur de la propriété V.

var dict = theList.Cast<A>().ToDictionary(a => a.K, a => a.V);
Dictionary<string, string> dict = theList.ToDictionary( x => x.K , x=> x.V);

Enumarable.ToDictionary<TSource,TKey> est ce que vous cherchez:

theList.ToDictionary(x => x.K, x => x.V);
Dictionary<string,string> dict = new Dictionary<string,string>();

theList.ForEach( param => dict[param.K] = param.V );

Un peu plus court, mais toujours essentiellement une boucle de for-each. J'aime mieux la solution ToDictionary().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top