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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Utilizzare Azure AI Studio per testare i modelli AI
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Implementare l'infinite scroll con QuickGrid in Blazor Server
Usare un KeyedService di default in ASP.NET Core 8
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Utilizzare le collection expression in C#
Code scanning e advanced security con Azure DevOps
Gestire liste di tipi semplici con Entity Framework Core
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework