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
La gestione della riconnessione al server di Blazor in .NET 9
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Montare Azure Blob Storage su Linux con BlobFuse2
Esporre tool MCP con Azure Functions
Proteggere l'endpoint dell'agente A2A delle Logic App
Ridurre il reflow cambiando il CSS
Generare una User Delegation SAS in .NET per Azure Blob Storage
Creare espressioni riutilizzabili nelle query LINQ per Entity Framework
Evitare memory leaks nelle closure JavaScript
Eliminare una project wiki di Azure DevOps
Creare una libreria CSS universale: Clip-path
Gestire gli accessi con Token su Azure Container Registry
I più letti di oggi
- Windows 8 Developer Event e Lab - Milano
- .NET Conference Italia 2020 - Online
- Microsoft Security Bulletin di ottobre 2008
- ASP.NET 4.0 AJAX arriva alla Preview 5, in attesa della beta2 di ASP.NET 4.0
- SQL Server CE 4.0 supporterà ASP.NET
- FlashRemoting: anche Macromedia atterra su .NET
- Build 2016: segui con noi in live streaming!
- MVP Summit 2003: le foto
- VS 2005 beta 1 tra luglio ed agosto
- SQL Server 2005 in beta 2


