The ToDictionary operator creates a Dictionary of type <K, T> from an input sequence of type T.
K is the type of the key and T is the type of the stored values.
There are four prototypes we cover.
public static Dictionary<K, T> ToDictionary<T, K>( this IEnumerable<T> source, Func<T, K> keySelector);
In this prototype, a Dictionary of type <K, T> is created and returned by enumerating the input sequence named source.
The keySelector method delegate is called to extract the key value from each input element, and that key is the element's key into the Dictionary.
The second ToDictionary prototype accepts an IEqualityComparer<K> object. Here is the second prototype:
public static Dictionary<K, T> ToDictionary<T, K>( this IEnumerable<T> source, Func<T, K> keySelector, IEqualityComparer<K> comparer);
This prototype uses an IEqualityComparer<K> object to make comparisons on the key value.
So if you add or access an element in the Dictionary, it will use this comparer to compare the key to the keys already in the Dictionary.
The third ToDictionary prototype accepts an element selector so that the data type of the value stored in the Dictionary can be of a different type than the input sequence element.
public static Dictionary<K, E> ToDictionary<T, K, E>( this IEnumerable<T> source, Func<T, K> keySelector, Func<T, E> elementSelector);
The fourth prototype accepts an elementSelector and a comparer object.
public static Dictionary<K, E> ToDictionary<T, K, E>( this IEnumerable<T> source, Func<T, K> keySelector, Func<T, E> elementSelector, IEqualityComparer<K> comparer);
The following code creates a dictionary of type Dictionary<int, Student> where the key of type int is the id member of the Student class and the Student object itself is the element stored.
using System; using System.Linq; using System.Collections; using System.Collections.Generic; class Program//from w w w . j a v a 2s . c o m { static void Main(string[] args) { Dictionary<int, Student> eDictionary = Student.GetStudentsArray().ToDictionary(k => k.id); Student e = eDictionary[2]; Console.WriteLine("Student whose id == 2 is {0} {1}", e.firstName, e.lastName); } } class Student { public int id; public string firstName; public string lastName; public static ArrayList GetStudentsArrayList() { ArrayList al = new ArrayList(); al.Add(new Student { id = 1, firstName = "Joe", lastName = "Ruby" }); al.Add(new Student { id = 2, firstName = "Windows", lastName = "Python" }); al.Add(new Student { id = 3, firstName = "Application", lastName = "HTML" }); al.Add(new Student { id = 4, firstName = "David", lastName = "Visual" }); al.Add(new Student { id = 101, firstName = "Kotlin", lastName = "Fortran" }); return (al); } public static Student[] GetStudentsArray() { return ((Student[])GetStudentsArrayList().ToArray()); } }
We declare our Dictionary to have a key type of integer since we will be using the Student.id field as the key.
The Dictionary element type is Student as well.