写作原因:最近写线程时遇到了优雅退出线程的问题,于是测试下这三个跳转语句的使用规则,如有不对的地方,请多多指教;
一、Microsoft官网解释
以下语句无条件转移控制:break 语句:将终止最接近的封闭迭代语句或 switch 语句。
continue 语句:启动最接近的封闭迭代语句的新迭代。
return 语句:可终止它所在的函数的执行,并将控制权返回给调用方。
goto 语句:将控制权转交给带有标签的语句。
有关引发异常并无条件转移控制权的 throw 语句的信息,请参阅 throw。
二、break
2.1 break语句概念
break
语句:将终止最接近的封闭迭代语句(即 for
、foreach
、while
或 do
循环)或 switch 语句。 break
语句将控制权转交给已终止语句后面的语句(若有)。
2.2 代码(for循环演示)
static void Main(string[] args)
{//for1for (int outer = 0; outer < 5; outer++){//for2for (int inner = 0; inner < 5; inner++){if (inner > outer){break;} Console.Write($"{inner} ");}Console.WriteLine();}
}
// Output:
// 0
// 0 1
// 0 1 2
// 0 1 2 3
// 0 1 2 3 4
- break和for2是最接近的
- for2中遇到break就从break所在位置跳出for{}外面,即break后面的和‘}’前面的语句不会被执行
三、continue
3.1 continue语句概念
continue
语句启动最接近的封闭迭代语句(即 for
、foreach
、while
或 do
循环)的新迭。continue语句只能用在while语句、do/while语句、for语句、或者for/in语句的循环体内,在其它地方使用都会引起错误!
3.2代码
static void Main(string[] args)
{for (int i = 0; i < 5; i++){Console.Write($"Iteration {i}: ");if (i < 3){Console.WriteLine("skip");continue;}Console.WriteLine("done");}
}
// Output:
// Iteration 0: skip
// Iteration 1: skip
// Iteration 2: skip
// Iteration 3: done
// Iteration 4: done
当i小于3时,就会执行skip,然后到达continue语句,这时就会返回到for头部执行新的一次循环,即continue之后for右括号之前的内容都不执行;
四、return
4.1 return
语句概念
return
语句终止它所在的函数的执行,并将控制权和函数结果(若有)返回给调用方。如果函数成员不计算值,则使用不带表达式的 return
语句。return语句就是用于指定函数返回的值。return语句只能出现在函数体内,出现在代码中的其他任何地方都会造成语法错误!
当执行return语句时,即使函数主体中还有其他语句,函数执行也会停止!
4.2 代码
- 直接作为一条语句表示当前函数结束
static void Main(string[] args)
{Console.WriteLine("First call:");DisplayIfNecessary(0);Console.WriteLine("Second call:");DisplayIfNecessary(1);
}
static void DisplayIfNecessary(int number)
{if (number > 0){return;}Console.WriteLine(number);
}
// Output:
//First call:
//0
//Second call:
可以看到,第一次输入0,不大于0,直接到Console.WriteLine(number);
第二次,输入1,执行return,直接跳出函数,return后面的语句 都不在执行;
- 循环中使用,以前我以为只会退出循环,并不会跳出函数,这次试验发现,只要在函数中触发了return,就会跳出函数返回;
static void Main(string[] args)
{int a=0;a=aa(a);Console.WriteLine("结束");
}static int aa(int a)
{for (int i = 0; i < 2; i++){if (i == 1){a = i;return a; //这时候。当I等于4的时候。遁环就结束了。而且也不会执行循环下面的语句。}}//跳出上面的循环,同时下面这些也不会执行,直接跳到最后,跳出这个函数Console.WriteLine("我跳出了for循环,看看我能不能被执行。。。");a = a + 250 - a; Console.WriteLine("a:{0}",a);return a;
}
// Output:
//结束
五、总结
break、continue语句简单,用在循环里面,阅读思维是,看到这两货,后面的都不用看了,前者是退出最近的循环,后者是结束当前循环并开启新一次循环,功能实现思维是,通过这两个语句实现条件控制,起到一个分水岭的功能;
return语句不光用在循环中,还用在函数中,在函数中触发到return,后面的不再执行,直接返回并跳出函数,如果是使用在函数中的循环中,一样跳出循环并跳到函数最后退出函数。
一句话:遇到这三个,他们后面的就不会再执行了。