0Pricing
C# Academy · Lekcja

Typ Range i operator ..

Pobieraj wycinki za pomocą wyrażeń zakresu.

Typ Range i operator .. 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.

Poznaj typ Range

System.Range opisuje fragment sekwencji za pomocą początkowego i końcowego obiektu Index. Doskonale współpracuje z operatorem zakresu .., który pozwala wyrażać podsekwencje.

using System;

Range r = 1..3;
Console.WriteLine(r.Start + ".." + r.End); // 1..3

Operator .. (zakresu)

Operator zakresu a..b tworzy obiekt Range od indeksu a (włącznie) do indeksu b (wyłącznie). Zatem 1..3 obejmuje pozycje 1 i 2.

using System;

int[] data = { 10, 20, 30, 40, 50 };
int[] slice = data[1..3];
Console.WriteLine(string.Join(",", slice)); // 20,30

Początek włącznie, koniec wyłącznie

Wyłączny koniec działa tak samo jak w pętli for: liczba elementów jest równa end - start. Zakres 2..5 zwraca trzy elementy.

using System;

int[] data = { 0, 1, 2, 3, 4, 5, 6 };
int[] slice = data[2..5];
Console.WriteLine(slice.Length);          // 3
Console.WriteLine(string.Join(",", slice)); // 2,3,4

Zakresy otwarte z jednej strony

Można pominąć dowolną z granic. ..3 oznacza "od początku do pozycji 3", a 2.. — "od pozycji 2 do końca". Samo .. kopiuje całą sekwencję.

using System;

int[] d = { 10, 20, 30, 40, 50 };
Console.WriteLine(string.Join(",", d[..3])); // 10,20,30
Console.WriteLine(string.Join(",", d[2..])); // 30,40,50
Console.WriteLine(string.Join(",", d[..]));  // 10,20,30,40,50

Zakresy z indeksami liczonymi od końca

Połączenie .. z ^ pozwala wycinać fragmenty względem końca. ^2.. oznacza "dwa ostatnie elementy".

using System;

int[] d = { 1, 2, 3, 4, 5 };
Console.WriteLine(string.Join(",", d[^2..]));  // 4,5
Console.WriteLine(string.Join(",", d[..^1]));  // 1,2,3,4 (drop last)

Range jako przechowywana wartość

Obiekt Range jest wartością, której można nadać nazwę i używać ponownie w różnych kolekcjach stosujących tę samą konwencję długości.

using System;

Range middle = 1..^1; // drop first and last
int[] a = { 0, 1, 2, 3, 4 };
Console.WriteLine(string.Join(",", a[middle])); // 1,2,3

Range.GetOffsetAndLength

Aby wyznaczyć zakres względem konkretnej długości, należy wywołać GetOffsetAndLength(length). Metoda zwraca przesunięcie początkowe i długość fragmentu, samodzielnie obsługując indeksy liczone od końca.

using System;

Range r = ^3..^1;
var (offset, length) = r.GetOffsetAndLength(5);
Console.WriteLine(offset + " " + length); // 2 2

Range.All

Statyczne Range.All jest odpowiednikiem .. i wybiera całą sekwencję. Jest przydatne przy przekazywaniu zakresów jako argumentów.

using System;

Range whole = Range.All;
int[] d = { 9, 8, 7 };
Console.WriteLine(string.Join(",", d[whole])); // 9,8,7

Jawne konstruowanie Range

Oprócz operatora można dla większej czytelności wywołać konstruktor lub metody fabryczne Range.StartAt i Range.EndAt.

using System;

Range a = new Range(1, 3);
Range b = Range.StartAt(2);
Range c = Range.EndAt(2);
Console.WriteLine(a + " | " + b + " | " + c);

Puste i nieprawidłowe zakresy

Zakres, w którym początek jest równy końcowi, tworzy pusty fragment. Zakres, którego początek znajduje się za końcem po rozwiązaniu granic, powoduje wyjątek podczas wycinania.

using System;

int[] d = { 1, 2, 3, 4 };
Console.WriteLine(d[2..2].Length); // 0 (empty)
try { var _ = d[3..1]; }
catch (ArgumentOutOfRangeException) { Console.WriteLine("invalid range"); }

Połączenie wszystkiego

Zakresy upraszczają przetwarzanie tekstu i tablic. W tym przykładzie pobieramy fragment ze środka tablicy bez wykonywania żadnych obliczeń indeksów.

using System;

int[] readings = { 5, 7, 9, 11, 13, 15 };
int[] window = readings[1..^1];
Console.WriteLine(string.Join(",", window)); // 7,9,11,13

Szybkie sprawdzenie

Należy upewnić się, że rozumieją Państwo zasady działania operatora zakresu.

Podsumowanie

Dowiedzieli się Państwo, że System.Range opisuje fragment za pomocą operatora ...

  • Początek jest włączny, a koniec wyłączny: liczba elementów = koniec - początek.
  • Granice są opcjonalne: ..3, 2.., ...
  • .. można łączyć z ^, aby wycinać fragmenty względem końca.
  • GetOffsetAndLength(length) przekształca zakres w konkretne wartości liczbowe.

Często zadawane pytania

Czy lekcja „Typ Range i operator ..” jest bezpłatna?

Tak — pełny tekst „Typ Range i operator ..” 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 „Typ Range i operator ..”?

Pobieraj wycinki za pomocą wyrażeń zakresu. Ć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 „Typ Range i operator ..”?

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. Typ Index i operator ^
  2. Typ Range i operator ..
  3. Zakresy z tablicami i ciągami znaków
  4. Niestandardowe typy obsługujące zakresy
← Powrót do C# Academy