使用foreach循环迭代两个列表

时间:2010-12-15 13:56:29

标签: c# .net

我有两个列表

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();
}

5 个答案:

答案 0 :(得分:24)

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

答案 1 :(得分:13)

如果您想单独遍历它们,那么您可以使用已经指出的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

答案 2 :(得分:6)

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

答案 3 :(得分:1)

这是你可以做到的另一种方式:

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
}

答案 4 :(得分:1)

如果你想同时迭代两个相同长度的列表(特别是在测试中比较两个列表的场景中),我认为for循环更有意义:

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