.NET Framework Al diccionario


Ejemplo

Devuelve un nuevo diccionario de la fuente IEnumerable usando la función de selector de teclas provista para determinar las claves. Lanzará una ArgumentException si keySelector no es inyectivo (devuelve un valor único para cada miembro de la colección de origen). Hay sobrecargas que permiten a uno especificar el valor que se almacenará, así como la clave.

var persons = new[] {
    new { Name="Fizz", Id=1},
    new { Name="Buzz", Id=2},
    new { Name="Foo", Id=3},
    new { Name="Bar", Id=4},
};

Especificar solo una función de selector de clave creará un Dictionary<TKey,TVal> con TKey el tipo de retorno del selector de clave, TVal el tipo de objeto original y el objeto original como valor almacenado.

var personsById = persons.ToDictionary(p => p.Id);
// personsById is a Dictionary<int,object>

Console.WriteLine(personsById[1].Name); //Fizz
Console.WriteLine(personsById[2].Name); //Buzz

La especificación de una función de selector de valor también creará un Dictionary<TKey,TVal> con TKey aún el tipo de retorno del selector de teclas, pero TVal ahora es el tipo de retorno de la función del selector de valor, y el valor devuelto como el valor almacenado.

var namesById = persons.ToDictionary(p => p.Id, p => p.Name);
//namesById is a Dictionary<int,string>

Console.WriteLine(namesById[3]); //Foo
Console.WriteLine(namesById[4]); //Bar

Como se indicó anteriormente, las claves devueltas por el selector de claves deben ser únicas. Lo siguiente lanzará una excepción.

var persons = new[] {
    new { Name="Fizz", Id=1},
    new { Name="Buzz", Id=2},
    new { Name="Foo", Id=3},
    new { Name="Bar", Id=4},
    new { Name="Oops", Id=4}
};

var willThrowException = persons.ToDictionary(p => p.Id)

Si no se puede dar una clave única para la colección de origen, considere usar ToLookup en su lugar. En la superficie, ToLookup se comporta de manera similar a ToDictionary, sin embargo, en la búsqueda resultante, cada clave se empareja con una colección de valores con claves coincidentes.