Compartir vía


Procedimientos: inicialización de un diccionario con un inicializador de colección (guía de programación de C#)

Una clase Dictionary<TKey,TValue> contiene una colección de pares clave-valor. Su método Add toma dos parámetros: uno para la clave y otro para el valor. 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. Otra opción es usar un inicializador de índice, lo que también se muestra en el ejemplo siguiente.

Nota:

La principal diferencia entre estas dos formas de inicializar la colección es cómo se controlan las claves duplicadas, por ejemplo:

{ 111, new StudentName { FirstName="Sachin", LastName="Karnik", ID=211 } },
{ 111, new StudentName { FirstName="Dina", LastName="Salimzianova", ID=317 } }, 

El método Add produce ArgumentException: 'An item with the same key has already been added. Key: 111', mientras que la segunda parte del ejemplo, el método de indexador público de lectura y escritura sobrescribe silenciosamente la entrada ya existente con la misma clave.

Ejemplo

En el ejemplo de código siguiente, Dictionary<TKey,TValue> se inicializa con instancias de tipo StudentName. La primera inicialización usa el método Add con dos argumentos. El compilador genera una llamada a Add por cada uno de los pares de claves int y valores StudentName. La segunda usa un método de indizador de lectura y escritura público de la clase Dictionary:

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 {students2[index].FirstName} {students2[index].LastName}");
        }
    }
}

Observe los dos pares de llaves de cada elemento de la colección en la primera declaración. Las llaves más internas contienen el inicializador de objeto para StudentName, mientras que las más externas contienen el inicializador para el par clave-valor que se agregará a studentsDictionary<TKey,TValue>. Por último, el inicializador completo de la colección para el diccionario se encierra entre llaves. 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.

Uso de IA para generar datos de prueba para colecciones de diccionarios

Puede usar herramientas de inteligencia artificial, como GitHub Copilot, para generar rápidamente datos de prueba de diccionario y escenarios de validación en los proyectos de C#.

Este es un mensaje de ejemplo que puede usar en El chat de Copilot de Visual Studio.

Generate data collections for tests to create a separate Dictionary<int, Student> containing 10 valid Student records and 5 invalid records. 
- Valid records should have realistic Name and Grade values.
- Invalid records should include cases such as missing Name, Grade < 0, or Grade > 100. 
- This dictionary should be used only for testing purposes and not modify existing production code.
- Generate test code that utilizes this test data for validation scenarios.
- Call test method to run the test.

Revise las sugerencias de Copilot antes de aplicarlas.

Para obtener más información sobre GitHub Copilot, consulte Preguntas más frecuentes de GitHub.

Consulte también