Il seguente codice compila, ma non riesce con un NullReferenceException
:C compilation # dizionario initializer incoerenza
class Test
{
public Dictionary<string, string> Dictionary { get; set; }
}
static void Main(string[] args)
{
var x = new Test
{
Dictionary = // fails
{
{ "key", "value" }, { "key2", "value2" }
}
};
}
Se si sostituisce la linea indicata 'riesce' con la seguente, funziona (come previsto):
Dictionary = new Dictionary<string, string>
C'è qualche proposito alla sintassi fallita - può essere usato con successo in qualche altro caso? O è una svista nel compilatore?
Così è usato per aggiungere elementi a un dizionario creato dal costruttore - avrei dovuto rendermene conto. Ma è un uso bizzarro dell'operatore di equals, poiché l'effetto è di aggiungere a qualsiasi cosa sia già nel dizionario (il costruttore potrebbe aver aggiunto prima gli elementi). –
Sort of, yes ... ma allo stesso tempo è usato per impostare i valori iniziali nella collezione, quindi si adatta in questo modo. –
Giusto. Il 'new' mancante avrebbe dovuto essere una bandiera rossa .. ma non avendo mai usato questa sintassi, ho preso l'operatore di uguali troppo alla lettera. –