Cześć
ze względów bezpieczeństwa stringi w C# są immutable. "Modyfikację" istniejącego stringa, można przeprowadzić wyłącznie przez podmianę danego łańcucha znaków nowym obiektem. Wyrażenie:
c.string_chain[i] = 'L';
próbuje w oczywisty sposób modyfikować dany string, więc kompilator na to nie pozwoli.
Jeżeli chcesz w ten sposób pracować na stringach użyj klasy StringBuilder, np.:
StringBuilder sb = new("Hello there!");
sb[6] = 'T';
string myOutputString = sb.ToString();
Inna sprawa to, to, że w Twoim przypadku string_chain jest inicializowany tylko 1 znakiem białym. Jeśli tak, to nie możesz się odwoływać do indexów większych niż (string_chain.Length - 1), bo dostaniesz IndexOutOfRangeException.
Nie wiem do końca jaki był Twój zamysł, ale jeśli chcesz tworzyć string po 1 znaku to użyj konkatenacji (operator +=) lub jeśli zależy Ci na wydajności to klasy StringBuilder.
Pozdrawaim