C# Academy · Lekcja

Typ Index i operator ^

Odwołuj się do elementów od końca kolekcji.

Lekcja 1 z 413 kroki

Typ Index i operator ^ to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 1 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 Index

C# udostępnia dedykowany typ System.Index do opisywania pozycji w sekwencji. W przeciwieństwie do zwykłego typu int obiekt typu Index może reprezentować pozycję liczoną od końca kolekcji, a nie tylko od jej początku.

Dzięki temu kod w rodzaju "podaj mi ostatni element" jest czytelny i bezpieczny.

using System;

int[] numbers = { 10, 20, 30, 40, 50 };
Index first = 0;
Console.WriteLine(numbers[first]); // 10

Operator ^ (od końca)

Operator daszka ^ tworzy obiekt Index liczący od końca. ^1 oznacza ostatni element, ^2 — przedostatni, i tak dalej.

Należy pamiętać, że ^1 oznacza ostatni prawidłowy indeks, natomiast ^0 jest równe Length i wskazuje pozycję za końcem.

using System;

int[] numbers = { 10, 20, 30, 40, 50 };
Console.WriteLine(numbers[^1]); // 50 (last)
Console.WriteLine(numbers[^2]); // 40

Index jako wartość pierwszej klasy

Obiekt Index jest rzeczywistą wartością, którą można przechowywać w zmiennej, przekazywać do metod i ponownie wykorzystywać. Pozwala to oddzielić pozycję od kolekcji.

using System;

int[] data = { 1, 2, 3, 4, 5 };
Index last = ^1;
Index secondLast = ^2;
Console.WriteLine(data[last]);       // 5
Console.WriteLine(data[secondLast]); // 4

IsFromEnd i Value

Każdy obiekt Index udostępnia dwie właściwości: Value (przesunięcie całkowite) oraz IsFromEnd (informację, czy został utworzony za pomocą ^).

using System;

Index fromStart = 2;
Index fromEnd = ^2;
Console.WriteLine(fromStart.Value + " " + fromStart.IsFromEnd); // 2 False
Console.WriteLine(fromEnd.Value + " " + fromEnd.IsFromEnd);     // 2 True

GetOffset wyznacza pozycję

Indeks liczony od końca ma znaczenie dopiero po poznaniu długości kolekcji. Index.GetOffset(length) przekształca go w konkretne przesunięcie liczone od zera.

using System;

Index fromEnd = ^1;
int length = 5;
int offset = fromEnd.GetOffset(length);
Console.WriteLine(offset); // 4

^0 wskazuje pozycję za końcem

Ponieważ ^0 jest rozwijane do wartości Length, indeksowanie za jego pomocą kończy się wyjątkiem. Jest ono przydatne wyłącznie jako wyłączna górna granica zakresu, co zostanie pokazane w następnej lekcji.

using System;

int[] data = { 1, 2, 3 };
try {
    Console.WriteLine(data[^0]); // out of range!
} catch (IndexOutOfRangeException) {
    Console.WriteLine("^0 is past the end");
}

Index działa z wieloma kolekcjami

Każdy typ wyposażony w indeksator oraz właściwość Length lub Count (i odpowiednią obsługę) może korzystać z Index. Tablice, string i Span<T> działają od razu.

using System;

string word = "Coddy";
Console.WriteLine(word[^1]); // y
Console.WriteLine(word[^5]); // C

Dynamiczne obliczanie indeksów

Obiekt Index można utworzyć z całkowitej wartości dostępnej w czasie działania, używając operatora ^ na zmiennej.

using System;

int[] data = { 5, 10, 15, 20 };
int n = 2;
Index idx = ^n;            // ^ works on variables too
Console.WriteLine(data[idx]); // 15

Index a zwykły int

Zwykły int zawsze liczy od początku. Index dodaje możliwość liczenia od końca, a jednocześnie pozwala na niejawną konwersję z int, dzięki czemu istniejący kod nadal działa.

using System;

Index a = 1;   // implicit from int
Index b = ^1;  // from end
Console.WriteLine(a.IsFromEnd); // False
Console.WriteLine(b.IsFromEnd); // True

Unikanie błędów o jeden

Aby uzyskać ostatni element, wcześniej trzeba było użyć wyrażenia arr[arr.Length - 1]. Dzięki ^1 intencja jest wyraźna i nie ma ryzyka pomyłki w obliczeniach.

using System;

int[] scores = { 88, 92, 79, 95 };
Console.WriteLine(scores[scores.Length - 1]); // old way: 95
Console.WriteLine(scores[^1]);                // new way: 95

Index w rzeczywistym kodzie

Oto mały pomocnik, który zwraca ostatni element dowolnej tablicy za pomocą ^1, zachowując przejrzystość miejsca wywołania.

using System;

static T Last<T>(T[] items) => items[^1];

int[] nums = { 3, 6, 9, 12 };
Console.WriteLine(Last(nums)); // 12

Szybkie sprawdzenie

Należy sprawdzić swoją wiedzę o typie Index i operatorze ^.

Podsumowanie

Dowiedzieli się Państwo, że System.Index reprezentuje pozycję, którą można liczyć od początku albo — za pomocą operatora ^ — od końca.

  • ^1 oznacza ostatni element, a ^0 jest równe Length (pozycja za końcem).
  • Index udostępnia właściwości Value, IsFromEnd oraz metodę GetOffset(length).
  • Typ ten jest niejawnie konwertowany z int i działa z tablicami, ciągami znaków oraz spanami.
Bezpłatny start

Ucz się C# dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
93
Lekcje
346

Często zadawane pytania

Czy lekcja „Typ Index i operator ^” jest bezpłatna?

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

Odwołuj się do elementów od końca kolekcji. Ć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 1 z 4.

Ile czasu zajmuje lekcja „Typ Index 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