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
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Managed deployment strategy in Azure DevOps
Generare la software bill of material (SBOM) in GitHub
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Testare l'invio dei messaggi con Event Hubs Data Explorer
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Migliorare l'organizzazione delle risorse con Azure Policy
La gestione della riconnessione al server di Blazor in .NET 9
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Change tracking e composition in Entity Framework
Filtering sulle colonne in una QuickGrid di Blazor
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework