Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
Sugerencia
Puede utilizar la ayuda de IA para inicializar un diccionario con GitHub Copilot.
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 students
Dictionary<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 GitHub Copilot para inicializar un diccionario
Puede usar GitHub Copilot en el IDE para generar código de C# para inicializar un diccionario con un inicializador de colección. Puede personalizar la solicitud para agregar detalles según sus requisitos.
En el texto siguiente se muestra una sugerencia de ejemplo para Copilot Chat.
Generate C# code to initialize Dictionary<int, Employee> using key-value pairs within the collection initializer. The employee class is a record class with two properties: Name and Age.
GitHub Copilot se basa en la inteligencia artificial, por lo que son posibles sorpresas y errores. Para obtener más información, consulte Preguntas más frecuentes sobre Copilot.
Obtenga más información sobre GitHub Copilot en Visual Studio y GitHub Copilot en VS Code.