Использование foreach с зубчатыми массивами

int[][] myArray = new int[10][];

foreach (int[] eachArray in myArray) {
eachArray = new int[2]
}

Я считаю, что он должен создать массив, который

{ 0 , 0 }
{0 , 0}
.........

Зубчатый массив так сбивает с толку.....


person Bug    schedule 02.02.2012    source источник
comment
Извините за путаницу, я добавлю больше деталей   -  person Bug    schedule 03.02.2012
comment
На предыдущий вопрос вам дали ответ с документацией. Там вы найдете ответ на этот вопрос.   -  person Damian Leszczyński - Vash    schedule 03.02.2012
comment
Массивы не сбивают с толку .. пожалуйста, задайте актуальный вопрос, а не просто код, который, как вы ожидаете, мы будем знать, о чем вы думаете или у вас есть проблемы с .. спасибо   -  person MethodMan    schedule 03.02.2012
comment
Зубчатые массивы не так уж и сбивают с толку, если вы думаете о них как о массиве массивов: он ведет себя так же, как и любой другой массив, но его элементы тоже являются массивами...   -  person Thomas Levesque    schedule 03.02.2012
comment
Если зубчатые массивы сбивают с толку, используйте вместо них List<List<int>>. У него также есть то преимущество, что его размер можно изменять без накладных расходов (копирование в другой массив).   -  person Tim Schmelter    schedule 03.02.2012
comment
Использование списка звучит потрясающе. Мне так больше нравится. Менее запутанный тоже   -  person Bug    schedule 03.02.2012
comment
@ user1143720: Что смущает в myList.Add(myOtherList)?   -  person Tim Schmelter    schedule 03.02.2012
comment
@TimSchmelter Я имел в виду, что использование списка не сбивает с толку. Извините за мой плохой английский.   -  person Bug    schedule 03.02.2012


Ответы (2)


Это не создаст зубчатый массив, который вы ищете. Он пытается присвоить новый экземпляр int[2] переменной итерации, а не слоту в исходном массиве. Это даже не скомпилируется, поскольку переменная итерации рассматривается компилятором как readonly

Способ сделать это с помощью цикла for

for (var i = 0; i < myArray.Length; i++) {
  myArray[i] = new int[2];
}
person JaredPar    schedule 02.02.2012
comment
Спасибо, однако я должен всегда использовать этот подход? Мне показалось, что использование цикла for довольно уродливо... Есть ли более красивый способ сделать это? - person Bug; 03.02.2012
comment
@user1143720 user1143720 цикл for - это стандартный способ сделать это. Это можно сделать с помощью полноценного инициализатора, но для этого требуется встроенная инициализация всего массива. - person JaredPar; 03.02.2012
comment
извините за этот тупой вопрос. Я сделаю больше исследований, прежде чем опубликовать следующий вопрос. - person Bug; 03.02.2012

Присвоение переменных цикла внутри цикла foreach не допускается. Вам нужен обычный цикл for со счетчиком, или вы можете попробовать что-то более причудливое:

int[][] myArray = Enumerable.Range(0, 10).Select(i => new int[2]).ToArray();
person Sergey Kalinichenko    schedule 02.02.2012