Le problème ici est que List
ne crée pas automatiquement les éléments. Pour initialiser un List<List<T>>
dont vous avez besoin quelque chose comme ceci:
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);
}
}
Notez que la mise en Capacity
ne suffit pas, vous devez appeler Add
le nombre de fois que vous avez besoin. Vous pouvez simplifier les choses en utilisant Enumerable
classe Linq:
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));
}
Encore une fois, notez que Enumerable.Repeat(new List<int>(), 10)
ne fonctionnera pas, car il ajoutera 10 références à la même liste.
Une autre approche LINQ à l'extrême:
List<List<int>> results = Enumerable.Repeat(0, 10)
.Select(i => Enumerable.Repeat(0, 10).ToList())
.ToList();
(. Le paramètre utilisé i
est nécessaire pour assurer que vous ne faites pas référence la même liste dix fois discuté ci-dessus)
Enfin, Pour accéder aux éléments, vous pouvez utiliser exactement la notation que vous avez utilisée auparavant. Une fois que les éléments ont été ajoutés, ils peuvent être lus ou modifiés comme indiqué:
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
results[i][j] = 2;
int x = results[i][j];
}
}
Que voulez-vous dire "ne fonctionne pas"? –
Probablement "déclenche une exception car l'élément référencé n'existe pas." –
Il se bloque et dit qu'il est hors de portée –