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..3Operator .. (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,30Począ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,4Zakresy 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,50Zakresy 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,3Range.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 2Range.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,7Jawne 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,13Szybkie 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
- Typ Index i operator ^
- Typ Range i operator ..
- Zakresy z tablicami i ciągami znaków
- Niestandardowe typy obsługujące zakresy