内部foreach循环在第二次迭代中不从第二个元素继续

时间:2019-06-03 06:13:38

标签: c# asp.net-mvc asp.net-mvc-5

我在内部foreach循环中使用了一个break,并继续了外部循环,但是当再次涉及到内部foreach时,它是从第一项开始的,而不是第二项。需要您的帮助。

foreach (var item in list1)
{
    bool flag = false;
    foreach (var item in list2)
    {
        item.category = item.category;
        item.text = item.text;
        item.key = item.key;

        db.Entry(item).State = EntityState.Modified;
        db.SaveChanges();
        flag = true;
        break;
    }
    if(flag) continue;
}

2 个答案:

答案 0 :(得分:2)

如果您跳出foreach循环然后再次点击它,这正是应该发生的情况。
如果要继续在第二,第三或第n个位置继续前进,请使用continue;。让我举个例子:

// This is a List of Lists of ints we'll iterate over
var outerList = new List<int> {1, 2, 3, 4, 5};
var innerList = new List<int> {1, 2, 3, 4, 5};

foreach(var outerItem in outerList)
{
    // This will print '1, 2, 3, 4, 5' over the course of execution (as expected)
    Console.WriteLine($"outerList item: {outerItem}");
    foreach (var innerItem in innerList)
    {
        // This will always print '1', never something else (as expected)*
        Console.WriteLine($"innerList item: {innerItem}");
        break;
    }
}

*这是因为foreach永远无法继续到innerList的第二个条目,因此它只打印第一个条目5(或者outerList中有很多项目)次。整个输出看起来像这样(没有#...)

outerList item: 1
innerList item: 1
outerList item: 2
innerList item: 1
outerList item: 3
innerList item: 1
outerList item: 4
innerList item: 1
outerList item: 5
innerList item: 1

现在,如果我们删除break,这将是输出:

outerList item: 1
innerList item: 1
innerList item: 2
innerList item: 3
innerList item: 4
innerList item: 5
outerList item: 2
innerList item: 1
...

如果要在外循环的第二次迭代中从内循环的第二个位置开始,则需要使用标准的for循环和整数迭代器,如下所示:

var outerList = new List<int> {1, 2, 3, 4, 5};
var innerList = new List<int> {1, 2, 3, 4, 5};

for (int i = 0; i < outerList.Count; i++)
{
    Console.WriteLine($"outerList item: {outerList[i]}");
    for (int j = i; j < innerList.Count; j++)
    {
        Console.WriteLine($"innerList item: {innerList[j]}");
    }
}

这将按预期打印:

outerList item: 1
innerList item: 1
innerList item: 2
innerList item: 3
innerList item: 4
innerList item: 5
outerList item: 2
innerList item: 2
innerList item: 3
innerList item: 4
innerList item: 5
outerList item: 3
innerList item: 3
innerList item: 4
innerList item: 5
outerList item: 4
innerList item: 4
innerList item: 5
outerList item: 5
innerList item: 5

p.s注意我如何为外部/内部List以及迭代器使用单独的名称。否则,它甚至无法编译(@mjwills已在注释中指出了这一点)

答案 1 :(得分:0)

如果要在两个集合中使用相同的索引,请使用以下代码

for (int i = 0; i < list1.Count; i++)
{
    item item1 = list1[i];
    item item2 = list2[i];
}