流程控制是C#语言最基本的重要语句:控制程序流的语句。
它们不是按代码在程序中的排序位置顺序执行的。(它们是根据条件是否满足决定的)
条件语句
条件语句可以根据条件是否满足或根据表达式的值来控制代码的执行分支。
c#有两个控制代码的分支的结构:
- if语句,判断条件是否满足
- switch语句,比较表达式和多个不同的值
if语句
对于条件分支,c#继承了 c 和 c++ 的if...else 结构。其语法非常直观:
if (condition)
statement(s);
else
statement(s);
如果在条件中要执行多个语句, 就需要用花括号 {} 把这些语句组合为一个块(这也适用于其他可以把语句组合为一块的c#结构,如 for 和 while 循环)。
bool isKeep; // 如果不赋初始值,c# 默认其值为 false
if(isKeep == true)
{
Console.WriteLine("is keep true");
}
else
{
Console.WriteLine("is keep false");
}
// 猜猜这段代码会执行哪条输出语句呢?
还可以单独使用 if 语句,不加最后的 else 语句。 也可以合并 else if 子句, 测试多个条件
int score = 5;
if(score > 5)
{
Console.WriteLine(" score > 5 ");
}
else if(score == 5)
{
Console.WriteLine(" score == 5 ");
}
else if(score < 5)
{
Console.WriteLine(" score < 5 ");
}
// 猜猜这段代码会输出什么?
添加到 if 子句中的 else if 语句的个数不受限制。
对于 if, 要注意的一个点是,如果条件分支中只有一条语句,就无须使用花括号:
if(isKeep == true)
Console.WriteLine(" is keep true");
在 c# 中, if 子句中的表达式必须等于布尔值(Boolean)。
switch 语句
如果 switch 参数中表达式的值等于某个 case 子句旁边的某个值, 就执行该 case 子句中的代码。
此时不需要使用花括号把语句组合到块中。 只需要使用 break 语句标记每段 case 代码的结尾即可。
也可以在 switch 语句中包含一条 default 子句, 如果表达式不等于任何 case 子句的值,就执行 default 子句的代码。
// 这段代码测试 money 变量的值
int money = 100;
switch(money)
{
case 10:
Console.WriteLine(" 10 money ");
break;
case 50 :
Console.WriteLine(" 50 money ");
break;
case 100:
Console.WriteLine(" 100 money ");
break;
case 150:
Console.WriteLine(" 1000 money ");
break;
default:
Console.WriteLine(" money is not 10, 50, 100 or 1000 ");
break;
}
注意 case 值必须是常量表达式, 不允许使用变量。
注意: 如果激活了块中靠前一条 case 子句,后面的 case 子句就不会被激活,除非使用 goto 语句特别标记也要激活后面的 case子句。
下面模拟 goto 语句在 switch 中使用的情况
switch(country)
{
case "America":
Console.WriteLine("America");
goto case "Britain";
case "France":
Console.WriteLine("French");
break;
case "Britain":
Console.WriteLine("English");
break;
}
还有一个情况, 如果一条 case 子句为空, 就可以从这条 case 子句跳到下一条 case 子句, 这样就可以用相同的方式处理
两条或多条 case 子句了(不需要 goto 语句)。
switch(country)
{
case "au":
case "uk":
case "us":
language = "English";
break;
case "at":
case "de":
language = "German";
break;
}
在 c# 中, switch 语句的一个有趣的地方是 case 子句的顺序是无关紧要的, 甚至可以把 default 子句放在最前面! 因此,任何两条 case 都不能相同。 所以不能这样编写:
const string england = "uk";
const string britain = "uk";
switch(country)
{
case england:
case britain: // 代码到这里会抛出错误
language = "English";
break;
}