Usare lo spread operator con i collection initializer in C#

di Stefano Mostarda, in .NET Framework,

Nello script #633 abbiamo introdotto i collection initializer come metodo per semplificare l'inizializzazione di liste a partire da C# 12. Quando dobbiamo creare una lista e inizializzarla nello stesso momento, spesso dobbiamo aggiungere oggetti provenienti da altre liste. L'unico approccio possibile senza i collection initializer è quello di usare il costruttore della lista passando una lista ottenuta dalla concatenazione delle lista sfruttando il metodo Concat così come mostrato in questo snippet.

int[] row0 = new [] {1,2,3};
int[] row1 = new [] { 4, 5, 6 };
int[] row2 = new [] { 7, 8, 9 };

var out = new List<int>(row0.Concat(row1).Concat(row2))

Questo approccio può essere semplificato con i collection initializer e con lo spread operator identificato da due punti consecutivi "..". Vediamolo in azione prima di spiegarne il funzionamento.

int[] row0 = new [] {1,2,3};
int[] row1 = new [] { 4, 5, 6 };
int[] row2 = new [] { 7, 8, 9 };

List<int> out = [..row0, ..row1, ..row2];

Lo spread operator appiattisce gli elementi di un array, quindi nell'esempio appena visto gli elementi di row0, row1 e row2 vengono passati uno ad uno alla lista out. Se non avessimo usato lo spread operator, il compilatore avrebbe cercato di creare l'istanza di out passando in input non i singoli elementi, ma gli interi insiemi craendo così una lista dove ogni elemento è un'altra lista causando un errore di compilazione visto che la variabile out è di tipo List[int].

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi