L'elemento spread
Combini le raccolte con l'operatore spread.
L'elemento spread è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.
L'elemento di espansione ..
All'interno di un'espressione di raccolta, l'elemento di espansione .. inserisce il contenuto di un'altra raccolta. È il modo dichiarativo per combinare sequenze.
using System;
int[] a = [1, 2, 3];
int[] b = [4, 5, 6];
int[] all = [..a, ..b];
Console.WriteLine(string.Join(",", all)); // 1,2,3,4,5,6Combinare espansioni ed elementi singoli
È possibile alternare liberamente gli elementi di espansione con singoli valori, mantenendo l'ordine.
using System;
int[] middle = [2, 3, 4];
int[] result = [1, ..middle, 5];
Console.WriteLine(string.Join(",", result)); // 1,2,3,4,5Aggiungere in testa o in coda
Le espansioni rendono banale "aggiungere in testa" o "aggiungere in coda", creando una nuova raccolta invece di modificare quella originale.
using System;
int[] core = [10, 20, 30];
int[] withHead = [0, ..core];
int[] withTail = [..core, 40];
Console.WriteLine(string.Join(",", withHead)); // 0,10,20,30
Console.WriteLine(string.Join(",", withTail)); // 10,20,30,40Espandere più origini
È possibile espandere un numero qualsiasi di raccolte in una sola raccolta. In questo modo si concatenano più liste in un'unica espressione.
using System;
using System.Collections.Generic;
List<string> x = ["a", "b"];
List<string> y = ["c"];
List<string> z = ["d", "e"];
List<string> merged = [..x, ..y, ..z];
Console.WriteLine(string.Join(",", merged)); // a,b,c,d,eEspandere tipi di raccolta diversi
L'origine dell'espansione può essere qualsiasi enumerabile: un array in una lista, una lista in un array e così via. È il tipo di destinazione a determinare il risultato.
using System;
using System.Collections.Generic;
int[] arr = [1, 2];
List<int> list = [3, 4];
int[] combined = [..arr, ..list];
Console.WriteLine(string.Join(",", combined)); // 1,2,3,4Espandere IEnumerable
È possibile espandere anche le sequenze lazy di LINQ; vengono enumerate quando viene creata la nuova raccolta.
using System;
using System.Linq;
var evens = Enumerable.Range(1, 6).Where(n => n % 2 == 0);
int[] result = [0, ..evens];
Console.WriteLine(string.Join(",", result)); // 0,2,4,6Costruire raccolte progressivamente
Le espansioni sono ideali per costruire una raccolta progressivamente senza chiamate imperative a Add.
using System;
int[] baseline = [1, 2, 3];
int[] extra = [4, 5];
int[] full = [..baseline, ..extra, 6];
Console.WriteLine(full.Length); // 6L'ordine è significativo
La sequenza risultante segue l'ordine testuale degli elementi e delle espansioni, quindi scambiare due espansioni modifica l'output.
using System;
int[] a = [1, 2];
int[] b = [3, 4];
Console.WriteLine(string.Join(",", [..a, ..b])); // 1,2,3,4
Console.WriteLine(string.Join(",", [..b, ..a])); // 3,4,1,2Espansioni e Concat
Le espansioni spesso sostituiscono Concat + ToArray. Sono più leggibili e consentono al compilatore di dimensionare il risultato in modo efficiente.
using System;
using System.Linq;
int[] a = [1, 2];
int[] b = [3, 4];
// old
int[] oldWay = a.Concat(b).ToArray();
// new
int[] newWay = [..a, ..b];
Console.WriteLine(oldWay.SequenceEqual(newWay)); // TrueEspandere in span
Poiché il tipo di destinazione può essere uno span, è possibile combinare i dati con la potenziale allocazione nello stack per i percorsi sensibili alle prestazioni.
using System;
ReadOnlySpan<int> head = [1, 2];
ReadOnlySpan<int> tail = [3, 4];
int[] joined = [..head, ..tail];
Console.WriteLine(string.Join(",", joined)); // 1,2,3,4Un'unione pratica
Qui si uniscono le impostazioni predefinite alle sostituzioni in un'unica espressione, mantenendo dopo i valori predefiniti quelli specificati successivamente.
using System;
string[] defaults = ["--verbose", "--color"];
string[] userArgs = ["--output=log.txt"];
string[] finalArgs = [..defaults, ..userArgs];
Console.WriteLine(string.Join(" ", finalArgs));Verifica rapida
Verifichi la Sua comprensione dell'elemento di espansione.
Riepilogo
Ha appreso l'elemento di espansione .. all'interno delle espressioni di raccolta.
[..a, ..b]concatena le raccolte.- Le espansioni possono essere combinate con elementi singoli e ne mantengono l'ordine.
- Le origini possono essere array, liste, span o qualsiasi
IEnumerable. - Rappresentano un'alternativa più chiara a
Concat().ToArray().
Domande Frequenti
La lezione «L'elemento spread» è gratuita?
Sì — il testo completo di «L'elemento spread» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.
Cosa imparerò in «L'elemento spread»?
Combini le raccolte con l'operatore spread. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C# Academy?
Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «L'elemento spread»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C# Academy?
Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Sintassi delle espressioni di raccolta
- L'elemento spread
- Inferenza del tipo di destinazione per le raccolte
- Collection builder