2010-07-09 6 views
3

Comment obtenir un IDictionnay à partir d'IListget Idictionnary from Ilist

+0

Cela dépend sur la façon dont vous voulez mapper les éléments de la liste au dictionnaire. S'il vous plaît ajouter plus de contexte. –

+0

ToDictionary(). –

+0

Vous devriez être un peu plus précis ce que vous devez accomplir exactement si vous voulez obtenir une réponse utile. – Koynov

Répondre

5

Vous pouvez utiliser Linq pour obtenir facilement un dictionnaire à partir d'une liste en utilisant la méthode d'extension ToDictionary et en fournissant une expression pour obtenir la clé (par ex.

internal class Program 
{ 
    private static void Main(string[] args) 
    { 
     IList<Person> list = new List<Person> {new Person("Bob", 40), new Person("Jill", 35)}; 
     IDictionary<string, Person> dictionary = list.ToDictionary(x => x.Name); 
    } 
} 

public class Person 
{ 
    private readonly int _age; 
    private readonly string _name; 

    public Person(string name, int age) 
    { 
     _name = name; 
     _age = age; 
    } 

    public int Age 
    { 
     get { return _age; } 
    } 

    public string Name 
    { 
     get { return _name; } 
    } 
} 

Sinon, comme Jon l'a souligné, si vous avez besoin d'utiliser une valeur différente pour les entrées dans le dictionnaire, vous pouvez également spécifier une deuxième expression pour obtenir la valeur - comme suit:

IDictionary<string, int> dictionary2 = list.ToDictionary(x => x.Name, x => x.Age); 
+1

Il peut être intéressant de noter que vous pouvez fournir une autre projection pour spécifier quelle valeur utiliser. –

4

Une liste contient un composant et un dictionnaire comporte deux composants. Vous ne pouvez pas simplement les convertir.

Si vous voulez que votre dictionnaire soit <int, object>, où int est l'indice des informations contenues dans votre liste ...

Dictionary<int, object> dict = new Dictionary<int, object>(); 
myList.ForEach(i => dict.Add(myList.IndexOf(i), i)); // Linq magic! 

Remplacer object avec votre type de liste, et assurez-vous que vous êtes using System.Linq;.


Ou utilisez ToDictionary().