W C# obiekt typu string można traktować jak ciąg znaków. Dostęp do pojedynczego znaku uzyskuje się za pomocą operatora indeksowania [].
Indeksy są liczone od zera, więc pierwszy znak ma indeks 0, drugi 1, a ostatni ma indeks Length - 1.
Przykład
string tekst = "ABC123";
char pierwszy = tekst[0]; // 'A'
char ostatni = tekst[tekst.Length - 1]; // '3'
Wyrażenie tekst[index] zwraca wartość typu char, czyli pojedynczy znak.
Zakres indeksów
Dla napisu o długości Length poprawne indeksy to:
0 ... Length - 1
Próba odczytu znaku spoza zakresu spowoduje błąd wykonania, np. IndexOutOfRangeException.
Zastosowanie przy losowaniu znaków
Indeksowanie często pojawia się przy generowaniu losowych haseł:
string pula = "ABC123";
Random random = new Random();
char znak = pula[random.Next(0, pula.Length)];
W tym przykładzie losowany jest indeks znaku z napisu pula, a następnie pobierany jest znak o tym indeksie.
Trzeba pamiętać, że w metodzie Random.Next(min, max) górna granica max jest wyłączna. Dlatego, aby uwzględnić ostatni znak napisu, należy użyć pula.Length, a nie pula.Length - 1 jako drugiego argumentu.