Подтвердить что ты не робот

Использование цикла foreach для итерации по двум спискам

У меня есть два списка

List<object> a = new List<object>();
List<object> b = new List<object>();

Теперь я хочу перебирать элементы обоих списков. Я мог бы это сделать, написав цикл foreach для каждого списка. Но возможно ли сделать что-то подобное?

foreach(object o in a, b) {
 o.DoSomething();
}

Было бы неплохо, если бы это было возможно:

foreach (object o in a && b) {
   o.DoSomething();
}
4b9b3361

Ответ 1

foreach(object o in a.Concat(b)) {
 o.DoSomething();
}

Ответ 2

Если вы хотите итерации через них индивидуально, вы можете использовать Enumerable.Concat, как уже указывалось.

Если вы хотите перебирать оба списка одновременно, имея доступ к одному элементу из каждого внутри вашего цикла, то в .NET 4.0 существует метод Enumerable.Zip, которые вы можете использовать.

int[] numbers = { 1, 2, 3, 4 };
string[] words = { "one", "two", "three" };

var numbersAndWords = numbers.Zip(words, (first, second) => first + " " + second);

foreach (var item in numbersAndWords)
{
    Console.WriteLine(item);
}

Результат:

1 one
2 two
3 three

Ответ 3

foreach(object o in a.Concat(b)) {
 o.DoSomething();
}

Ответ 4

Это можно сделать другим способом:

for (int i = 0; i < (a.Count > b.Count ? a.Count : b.Count); i++)
{
    object objA, objB;
    if (i < a.Count) objA = a[i];
    if (i < b.Count) objB = b[i];

    // Do stuff
}

Ответ 5

Если вы хотите одновременно перебирать два списка одинаковой длины (особенно в сценариях, таких как сравнение двух списков при тестировании), я думаю, что для цикла имеет смысл:

for (int i = 0; i < list1.Count; i++) {
    if (list1[i] == list2[i]) {
        // Do something
    }
}