我在内部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;
}
答案 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];
}