Не понимаю как исправить ошибку CS0200

Не понимаю как исправить ошибку. У меня есть данный кусок кода:

int N = int.Parse(Console.ReadLine());
List<Tuple<int, int>> v = new List<Tuple<int, int>>();
List<Tuple<int, int>> rl = new List<Tuple<int, int>>();
for (int i = 1; i < N; i++)
    rl[rl.Count - 1].Item2 = v[i].Item2; //< CS0200

Как можно исправить тут ошибку? Я понимаю, что у меня разрешено только для чтения, но не знаю как разрешить запись. В коде нужно добавить второй элемент из списка v в конец списка rl.

PS: пробовал еще так

rl.Last(new Tuple<int, int>(rl.Count - 1, 0)) = v[i].Item2;

но тут появляется новая ошибка CS1503


Ответы (1 шт):

Автор решения: Yotic

Вообще тут двухслойная ошибка в одной строке.

  1. Изменение картежа из массива по индексу. - Вы используете Tuple, но свойства Tuple всегда доступны только для чтения, чтобы изменить одно из свойств Tuple, нужно полностью заменить Tuple на только что созданный Tuple с нужными вами изменениями.\ - Используйте ValueTuple.
  2. Изменение TupleValue в массиве. - Нельзя изменять свойства структур в массиве.

Так из вашего кода нужно сделать:

int N = int.Parse(Console.ReadLine());
List<(int, int)> v = new List<(int, int)>();
List<(int, int)> rl = new List<(int, int)>();
for (int i = 1; i < N; i++)
    rl[rl.Count - 1] = (rl[rl.Count - 1].Item1, v[i].Item2);
→ Ссылка