C#打破
示例
在循环中(forforeach,do,while),该break语句中止最内层循环的执行,并返回到其后的代码。也可以与它一起使用yield,它指定迭代器已结束。
for (var i = 0; i < 10; i++) { if (i == 5) { break; } Console.WriteLine("This will appear only 5 times, as the break will stop the loop."); }
.NETFiddle上的实时演示
foreach (var stuff in stuffCollection) { if (stuff.SomeStringProp == null) break; // Ifstuff.SomeStringPropfor any "stuff" is null, the loop is aborted. Console.WriteLine(stuff.SomeStringProp); }
break-statement也用于切换案例构造中,以突破案例或默认段。
switch(a) { case 5: Console.WriteLine("一个是5!"); break; default: Console.WriteLine("一个别的东西!"); break; }
在switch语句中,每个case语句的末尾都需要'break'关键字。这与某些允许“陷入”系列中下一个case语句的语言相反。解决方法包括“goto”语句或顺序堆叠“case”语句。
以下代码将给出数字0,1,2,...,9,而最后一行将不执行。yieldbreak表示函数结束(不只是循环)。
public static IEnumerable<int> GetNumbers() { int i = 0; while (true) { if (i < 10) { yield return i++; } else { yield break; } } Console.WriteLine("This line will not be executed"); }
.NETFiddle上的实时演示
请注意,与某些其他语言不同,无法在C#中标记特定的中断。这意味着在嵌套循环的情况下,仅最里面的循环将被停止:
foreach (var outerItem in outerList) { foreach (var innerItem in innerList) { if (innerItem.ShoudBreakForWhateverReason) //这只会打破内部循环,外部会继续: break; } }
如果要在此处突破外循环,可以使用几种不同的策略之一,例如:
一个跳转语句跳到整个循环结构的出来。
shouldBreak可以在外部循环的每次迭代结束时检查的特定标志变量(在以下示例中)。
重构代码以return在最内部的循环主体中使用一条语句,或者完全避免整个嵌套循环结构。
bool shouldBreak = false; while(comeCondition) { while(otherCondition) { if (conditionToBreak) { //转移控制流程都流向以下标签... goto endAllLooping; //或使用一个标志,可以在外部循环中对其进行检查: shouldBreak = true; } } if(shouldBreakNow) { break; //如果标志设置为true,则跳出外循环 } } endAllLooping: //控制流将继续的标签