Проблема в том, что List
не создает элементы автоматически. Для инициализации List<List<T>>
вам нужно что-то вроде этого:
List<List<int>> results = new List<List<int>>();
for (int i = 0; i < 10; i++)
{
results.Add(new List<int>());
for (int j = 0; j < 10; j++)
{
results[i].Add(0);
}
}
Обратите внимание, что настройки Capacity
недостаточно, вам нужно позвонить Add
столько раз, сколько вам нужно. Кроме того, вы можете упростить вещи, используя класс Enumerable
Линка:
List<List<int>> results = new List<List<int>>();
for (int i = 0; i < 10; i++)
{
results.Add(new List<int>());
results[i].AddRange(Enumerable.Repeat(0, 10));
}
Опять же, обратите внимание, что Enumerable.Repeat(new List<int>(), 10)
не будет работать, так как добавит 10 ссылок в один и тот же список.
Другой подход, использующий Linq до крайности:
List<List<int>> results = Enumerable.Repeat(0, 10)
.Select(i => Enumerable.Repeat(0, 10).ToList())
.ToList();
(Неиспользуемый параметр i
необходим для того, чтобы вы не ссылались на один и тот же список десять раз, как описано выше.)
Наконец, для доступа к элементам вы можете использовать именно те обозначения, которые вы использовали ранее. После добавления элементов их можно прочитать или изменить, как показано на рисунке:
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
results[i][j] = 2;
int x = results[i][j];
}
}