C# Language Inizializzatori dell'indice C # 6


Esempio

A partire da C # 6, le raccolte con indicizzatori possono essere inizializzate specificando l'indice da assegnare tra parentesi quadre, seguito da un segno di uguale, seguito dal valore da assegnare.

Inizializzazione del dizionario

Un esempio di questa sintassi utilizzando un dizionario:

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

Questo è equivalente a:

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

La sintassi di inizializzazione della raccolta per eseguire questa operazione prima di C # 6 era:

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

Quale corrisponderebbe a:

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

Quindi c'è una differenza significativa nella funzionalità, poiché la nuova sintassi usa l' indicizzatore dell'oggetto inizializzato per assegnare valori invece di usare il suo metodo Add() . Ciò significa che la nuova sintassi richiede solo un indicizzatore pubblicamente disponibile e funziona per qualsiasi oggetto che ne ha 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
}

Ciò produrrebbe:

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