int[][] myArray = new int[10][];
foreach (int[] eachArray in myArray) {
eachArray = new int[2]
}
Я считаю, что он должен создать массив, который
{ 0 , 0 }
{0 , 0}
.........
Зубчатый массив так сбивает с толку.....
int[][] myArray = new int[10][];
foreach (int[] eachArray in myArray) {
eachArray = new int[2]
}
Я считаю, что он должен создать массив, который
{ 0 , 0 }
{0 , 0}
.........
Зубчатый массив так сбивает с толку.....
Это не создаст зубчатый массив, который вы ищете. Он пытается присвоить новый экземпляр int[2]
переменной итерации, а не слоту в исходном массиве. Это даже не скомпилируется, поскольку переменная итерации рассматривается компилятором как readonly
Способ сделать это с помощью цикла for
for (var i = 0; i < myArray.Length; i++) {
myArray[i] = new int[2];
}
for
- это стандартный способ сделать это. Это можно сделать с помощью полноценного инициализатора, но для этого требуется встроенная инициализация всего массива.
- person JaredPar; 03.02.2012
Присвоение переменных цикла внутри цикла foreach
не допускается. Вам нужен обычный цикл for
со счетчиком, или вы можете попробовать что-то более причудливое:
int[][] myArray = Enumerable.Range(0, 10).Select(i => new int[2]).ToArray();
List<List<int>>
. У него также есть то преимущество, что его размер можно изменять без накладных расходов (копирование в другой массив). - person Tim Schmelter   schedule 03.02.2012myList.Add(myOtherList)
? - person Tim Schmelter   schedule 03.02.2012