0Pricing
C# Academy · Lekcja

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,5

Dodawanie 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,40

Rozpraszanie 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,e

Rozpraszanie 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,4

Rozpraszanie 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,6

Budowanie 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); // 6

Kolejność 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,2

Elementy 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)); // True

Rozpraszanie 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,4

Praktyczne łą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

  1. Składnia wyrażeń kolekcji
  2. Element rozpakowywania
  3. Wnioskowanie typu docelowego kolekcji
  4. Konstruktory kolekcji
← Powrót do C# Academy