C# Language Inicializadores de índice C # 6


Ejemplo

A partir de C # 6, las colecciones con indizadores se pueden inicializar especificando el índice a asignar entre corchetes, seguido de un signo igual, seguido del valor a asignar.

Inicialización del diccionario

Un ejemplo de esta sintaxis usando un Diccionario:

var dict = new Dictionary<string, int>
{
    ["key1"] = 1,
    ["key2"] = 50
};

Esto es equivalente a:

var dict = new Dictionary<string, int>();
dict["key1"] = 1;
dict["key2"] = 50

La sintaxis de inicialización de colección para hacer esto antes de C # 6 era:

var dict = new Dictionary<string, int>
{
    { "key1", 1 },
    { "key2", 50 }
};

Que correspondería a:

var dict = new Dictionary<string, int>();
dict.Add("key1", 1);
dict.Add("key2", 50);

Por lo tanto, existe una diferencia significativa en la funcionalidad, ya que la nueva sintaxis utiliza el indexador del objeto inicializado para asignar valores en lugar de usar su método Add() . Esto significa que la nueva sintaxis solo requiere un indexador disponible públicamente y funciona para cualquier objeto que tenga uno.

public class IndexableClass
{
    public int this[int index]
    {
        set 
        { 
            Console.WriteLine("{0} was assigned to index {1}", value, index);
        }
    }
}

var foo = new IndexableClass
{
    [0] = 10,
    [1] = 20
}

Esto daría como resultado:

10 was assigned to index 0
20 was assigned to index 1