Как перебрать массивы массивов через foreach

302
15 октября 2017, 20:38

Пытаюсь перебрать массивы массивов через foreach: Ошибка

int[][] anArray = {new int[] {123,432}, new int[] {543,542}};
foreach (int i in anArray) //ошибка
    foreach (int j in anArray[i])
        Console.WriteLine(anArray[i][j]);
Console.ReadKey();

Но при переборе через for все хорошо

int[][] anArray = {new int[] {123,432}, new int[] {543,542}};
for (int i = 0; i < anArray.Length; i++)
    for (int j = 0; j < anArray[i].Length; j++)
        Console.WriteLine(anArray[i][j]);
Console.ReadKey();

В чем дело?

Answer 1

Замени int на var в foreach.

У тебя же массив массивов => там int[]

Answer 2

Правильно:

foreach (int[] arr in anArray)
    foreach (int x in arr)
        Console.WriteLine(x);

Цикл foreach используется для итерации по коллекции (или последовательности) и на каждом шаге он выдает следующий элемент конкретной коллекции (последовательности).
Цикл for же более универсален, на каждой итерации он просто меняет некую переменную (или несколько переменных, или ничего не меняет) по некоторому правилу, а также проверяет некие граничные условия (или ничего не проверяет), у вас, в частности, меняются в циклах for переменные i, j, которые вы используете в качестве индекса массива.

У вас массив массивов, поэтому внешний foreach возвращает поочередно все "внутренние" массивы из массива "внешнего".

Answer 3

Ещё один метод, возможно, вам подойдёт:

foreach (int v in anArray.SelectMany(x => x))
    Console.WriteLine(v);
Answer 4
int[][] anArray = {new int[] {123,432}, new int[] {543,542}};
foreach (int[] i in anArray) { // anArray содержит 2мерный массив, значит i должен быть массивом, а не элементом.
    foreach (int j in i) {
        Console.WriteLine(j);
    }
}
READ ALSO
Как обратится к элементу формы из обработчика события, которое вызывается в другом потоке?

Как обратится к элементу формы из обработчика события, которое вызывается в другом потоке?

В программе создаются и удаляются объекты, в них есть события и метод который запускается в отдельном потокеВ этом методе который будет работать...

367
Windows Forms Application в Rider

Windows Forms Application в Rider

В Visual Studio есть Windows Forms ApplicationА есть ли это в Rider? Никак не могу найти

284
Прерывание выполнения метода &ldquo;А&rdquo; на время выполнения метода &ldquo;Б&rdquo;

Прерывание выполнения метода “А” на время выполнения метода “Б”

Доброго времени сутокПытаюсь реализовать очередь на отправку сообщений

182