Procedimientos: inicialización de un diccionario con un inicializador de colección (guía de programación de C#)How to initialize a dictionary with a collection initializer (C# Programming Guide)

Una clase Dictionary<TKey,TValue> contiene una colección de pares clave-valor.A Dictionary<TKey,TValue> contains a collection of key/value pairs. Su método Add toma dos parámetros: uno para la clave y otro para el valor.Its Add method takes two parameters, one for the key and one for the value. Una manera de inicializar Dictionary<TKey,TValue>, o cualquier colección cuyo método Add tome varios parámetros, es incluir entre llaves cada conjunto de parámetros, como se muestra en el ejemplo siguiente.One way to initialize a Dictionary<TKey,TValue>, or any collection whose Add method takes multiple parameters, is to enclose each set of parameters in braces as shown in the following example. Otra opción es usar un inicializador de índice, lo que también se muestra en el ejemplo siguiente.Another option is to use an index initializer, also shown in the following example.

EjemploExample

En el ejemplo de código siguiente, Dictionary<TKey,TValue> se inicializa con instancias de tipo StudentName.In the following code example, a Dictionary<TKey,TValue> is initialized with instances of type StudentName. La primera inicialización usa el método Add con dos argumentos.The first initialization uses the Add method with two arguments. El compilador genera una llamada a Add por cada uno de los pares de claves int y valores StudentName.The compiler generates a call to Add for each of the pairs of int keys and StudentName values. La segunda usa un método de indizador de lectura y escritura público de la clase Dictionary:The second uses a public read / write indexer method of the Dictionary class:

public class HowToDictionaryInitializer
{
    class StudentName
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int ID { get; set; }
    }

    public static void Main()
    { 
        var students = new Dictionary<int, StudentName>()
        {
            { 111, new StudentName { FirstName="Sachin", LastName="Karnik", ID=211 } },
            { 112, new StudentName { FirstName="Dina", LastName="Salimzianova", ID=317 } },
            { 113, new StudentName { FirstName="Andy", LastName="Ruth", ID=198 } }
        };

        foreach(var index in Enumerable.Range(111, 3))
        {
            Console.WriteLine($"Student {index} is {students[index].FirstName} {students[index].LastName}");
        }
        Console.WriteLine();		

        var students2 = new Dictionary<int, StudentName>()
        {
            [111] = new StudentName { FirstName="Sachin", LastName="Karnik", ID=211 },
            [112] = new StudentName { FirstName="Dina", LastName="Salimzianova", ID=317 } ,
            [113] = new StudentName { FirstName="Andy", LastName="Ruth", ID=198 }
        };

        foreach (var index in Enumerable.Range(111, 3))
        {
            Console.WriteLine($"Student {index} is {students[index].FirstName} {students[index].LastName}");
        }
    }
}

Observe los dos pares de llaves de cada elemento de la colección en la primera declaración.Note the two pairs of braces in each element of the collection in the first declaration. Las llaves internas contienen el inicializador de objeto para StudentName, mientras que las externas contienen el inicializador para el par clave-valor que se va a agregar a la clase Dictionary<TKey,TValue> students.The innermost braces enclose the object initializer for the StudentName, and the outermost braces enclose the initializer for the key/value pair that will be added to the students Dictionary<TKey,TValue>. Por último, el inicializador completo de la colección para el diccionario se encierra entre llaves.Finally, the whole collection initializer for the dictionary is enclosed in braces. En la segunda inicialización, el lado izquierdo de la asignación es la clave y el lado derecho es el valor, con un inicializador de objeto para StudentName.In the second initialization, the left side of the assignment is the key and the right side is the value, using an object initializer for StudentName.

Vea tambiénSee also