Element rozpakowywania
Łącz kolekcje za pomocą operatora rozpakowywania.
Element rozpakowywania to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 4 lekcji w sumie.
Element rozpraszający ..
W wyrażeniu kolekcji element rozpraszający .. wstawia zawartość innej kolekcji. Umożliwia to deklaratywne łączenie sekwencji.
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,6Łączenie elementów rozpraszających i pojedynczych
Można dowolnie przeplatać elementy rozpraszające z pojedynczymi wartościami, a ich kolejność zostanie zachowana.
using System;
int[] middle = [2, 3, 4];
int[] result = [1, ..middle, 5];
Console.WriteLine(string.Join(",", result)); // 1,2,3,4,5Dodawanie na początku i na końcu
Elementy rozpraszające sprawiają, że „dodanie na początku” lub „dodanie na końcu” jest banalnie proste, a wynikiem jest nowa kolekcja, bez modyfikowania oryginalnej.
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,40Rozpraszanie wielu źródeł
Można rozpraszać dowolną liczbę kolekcji do jednej kolekcji. Umożliwia to połączenie kilku list w jednym wyrażeniu.
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,eRozpraszanie różnych typów kolekcji
Źródłem rozpraszania może być dowolny obiekt enumerowalny: tablica może zostać rozproszona do listy, lista do tablicy i tak dalej. Typ docelowy określa wynik.
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,4Rozpraszanie IEnumerable
Można rozpraszać nawet leniwe sekwencje z LINQ; są one wyliczane podczas tworzenia nowej kolekcji.
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,6Budowanie kolekcji
Elementy rozpraszające świetnie nadają się do stopniowego budowania kolekcji bez imperatywnych wywołań Add.
using System;
int[] baseline = [1, 2, 3];
int[] extra = [4, 5];
int[] full = [..baseline, ..extra, 6];
Console.WriteLine(full.Length); // 6Kolejność ma znaczenie
Wynikowa sekwencja zachowuje kolejność tekstową elementów i elementów rozpraszających, więc zamiana elementów rozpraszających zmienia wynik.
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,2Elementy rozpraszające a Concat
Elementy rozpraszające często zastępują Concat + ToArray. Kod jest wtedy czytelniejszy, a kompilator może efektywnie określić rozmiar wyniku.
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)); // TrueRozpraszanie do spanów
Ponieważ typem docelowym może być span, można łączyć dane z potencjalną alokacją na stosie, co sprawdza się na ścieżkach wrażliwych na wydajność.
using System;
ReadOnlySpan<int> head = [1, 2];
ReadOnlySpan<int> tail = [3, 4];
int[] joined = [..head, ..tail];
Console.WriteLine(string.Join(",", joined)); // 1,2,3,4Praktyczne łączenie
W tym przykładzie łączymy ustawienia domyślne z nadpisaniami w jednym wyrażeniu, zachowując późniejsze wartości po wartościach domyślnych.
using System;
string[] defaults = ["--verbose", "--color"];
string[] userArgs = ["--output=log.txt"];
string[] finalArgs = [..defaults, ..userArgs];
Console.WriteLine(string.Join(" ", finalArgs));Szybkie sprawdzenie
Sprawdź swoją znajomość elementu rozpraszającego.
Podsumowanie
Poznałeś element rozpraszający .. używany wewnątrz wyrażeń kolekcji.
[..a, ..b]łączy kolekcje.- Elementy rozpraszające można łączyć z pojedynczymi elementami, zachowując ich kolejność.
- Źródłami mogą być tablice, listy, spany lub dowolny obiekt
IEnumerable. - Jest to czytelniejsza alternatywa dla
Concat().ToArray().
Często zadawane pytania
Czy lekcja „Element rozpakowywania” jest bezpłatna?
Tak — pełny tekst „Element rozpakowywania” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Element rozpakowywania”?
Łącz kolekcje za pomocą operatora rozpakowywania. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C# Academy?
Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Element rozpakowywania”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?
Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Składnia wyrażeń kolekcji
- Element rozpakowywania
- Wnioskowanie typu docelowego kolekcji
- Konstruktory kolekcji