Inizializzazione dell’elenco in linea

Sto ottenendo uno strano errore quando faccio questo: (.net 2.0)

public overrides List getSpaceballs { get { return new List() { "abc","def","egh" }; } } 

VS sta chiedendo ; dopo () . Perché?

Sono sicuro che posso farlo:

 public overrides string[] getSpaceballs { get { return new string[] { "abc","def","egh" }; } } 

La prima opzione non è legale 🙂

È ansible eseguire solo quel tipo di inizializzatore sugli array.

– Modifica: vedi il post di Andrew Hare (e altri, sotto); è disponibile solo in v3 e versioni successive.

– Modifica di nuovo:

Per essere chiari, se il tuo compilatore è di 3 o superiore, puoi scegliere come target 2.0, per farlo funzionare (perché è compilato sul codice mostrato da Andrew, sotto). Ma se il tuo compilatore è 2, allora non puoi.

La syntax di inizializzazione della raccolta di C # è supportata solo nelle versioni 3 e successive (dato che hai citato .NET 2.0, assumerò che tu stia utilizzando anche C # 2). Può essere un po ‘confuso dato che C # ha sempre supportato una syntax simile per l’inizializzazione dell’array, ma non è proprio la stessa cosa.

Gli inizializzatori della raccolta sono un trucco del compilatore che ti consente di creare e inizializzare una raccolta in un’unica istruzione come questa:

 var list = new List { "foo", "bar" }; 

Tuttavia questa dichiarazione è tradotta dal compilatore a questo:

 List <>g__initLocal0 = new List(); <>g__initLocal0.Add("foo"); <>g__initLocal0.Add("bar"); List list = <>g__initLocal0; 

Come puoi vedere, questa funzione è un po ‘di zucchero di syntax che semplifica un pattern in una singola espressione.

Come sottolineano gli altri utenti, questo non è supportato in 2.0. Tuttavia, puoi imitarlo eseguendo quanto segue.

 public overrides List getSpaceballs { get { return new List ( new String[] {"abc","def","egh"} ); } } 

Si noti che questo crea un sovraccarico computazionale.