Le collection expressions unificano la creazione delle collezioni: la stessa sintassi tra parentesi quadre funziona per array, List<T>, Span<T>, HashSet<T> e molti altri tipi.
Sintassi di base
int[] numeri = [1, 2, 3];
List<string> nomi = ["Anna", "Luca"];
HashSet<char> vocali = ['a', 'e', 'i', 'o', 'u'];
ReadOnlySpan<byte> intestazione = [0x50, 0x4B, 0x03, 0x04];
List<int> vuota = [];
Il compilatore sceglie il modo più efficiente di costruire ogni tipo: per esempio uno span di costanti può puntare direttamente ai dati del programma senza allocare.
L'operatore spread
Con .. si inseriscono tutti gli elementi di un'altra collezione:
string[] base_ = ["lettura"];
string[] admin = [.. base_, "scrittura", "eliminazione"];
IEnumerable<int> Pari(int max) => [.. Enumerable.Range(0, max).Where(n => n % 2 == 0)];
Nelle firme dei metodi
Le collection expressions funzionano ovunque il tipo di destinazione sia noto, anche come argomenti:
void Notifica(IReadOnlyList<string> destinatari) { /* ... */ }
Notifica(["info@azienda.it", "supporto@azienda.it"]);
Perché adottarle
- Codice uniforme: cambiare il tipo della collezione non richiede di riscrivere l'inizializzazione.
- Prestazioni: il compilatore ottimizza la costruzione per ogni tipo.
- Leggibilità: lo spread sostituisce molte chiamate a
ConcateAddRange.
Commenti (0)
Nessun commento ancora.