我有两个列表
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();
}
答案 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
}
}