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: //控制流将继续的标签