C# 分支语句
分支结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。 下面是大多数编程语言中典型的分支结构的一般形式:

一、if 语句
一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。
C# 中 if 语句的语法:
|
1 2 3 4 5 |
<span class="hljs-keyword">if</span>(boolean_expression) { <span class="hljs-comment">/* 如果布尔表达式为真将执行的语句 */</span> } |
如果布尔表达式为 true,则 if 语句内的代码块将被执行。如果布尔表达式为 false,则 if 语句结束后的第一组代码(闭括号后)将被执行。
实例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<span class="hljs-keyword">using</span> System; <span class="hljs-keyword">namespace</span> <span class="hljs-title">DecisionMaking</span> { <span class="hljs-keyword">class</span> <span class="hljs-title">Program</span> { <span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Main</span>(<span class="hljs-params"><span class="hljs-keyword">string</span>[] args</span>) </span>{ <span class="hljs-comment">/* 局部变量定义 */</span> <span class="hljs-keyword">int</span> a = <span class="hljs-number">10</span>; <span class="hljs-comment">/* 使用 if 语句检查布尔条件 */</span> <span class="hljs-keyword">if</span> (a < <span class="hljs-number">20</span>) { <span class="hljs-comment">/* 如果条件为真,则输出下面的语句 */</span> Console.WriteLine(<span class="hljs-string">"a 小于 20"</span>); } Console.WriteLine(<span class="hljs-string">"a 的值是 {0}"</span>, a); Console.ReadLine(); } } } |
当上面的代码被编译和执行时,它会产生下列结果:
|
1 2 3 |
a 小于 <span class="hljs-number">20</span> a 的值是 <span class="hljs-number">10</span> |
二、if…else 语句
一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。
C# 中 if…else 语句的语法:
|
1 2 3 4 5 6 7 8 9 |
<span class="hljs-keyword">if</span>(boolean_expression) { <span class="hljs-comment">/* 如果布尔表达式为真将执行的语句 */</span> } <span class="hljs-keyword">else</span> { <span class="hljs-comment">/* 如果布尔表达式为假将执行的语句 */</span> } |
如果布尔表达式为 true,则执行 if 块内的代码。如果布尔表达式为 false,则执行 else 块内的代码。
实例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<span class="hljs-keyword">using</span> System; <span class="hljs-keyword">namespace</span> <span class="hljs-title">DecisionMaking</span> { <span class="hljs-keyword">class</span> <span class="hljs-title">Program</span> { <span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Main</span>(<span class="hljs-params"><span class="hljs-keyword">string</span>[] args</span>) </span>{ <span class="hljs-comment">/* 局部变量定义 */</span> <span class="hljs-keyword">int</span> a = <span class="hljs-number">100</span>; <span class="hljs-comment">/* 检查布尔条件 */</span> <span class="hljs-keyword">if</span> (a < <span class="hljs-number">20</span>) { <span class="hljs-comment">/* 如果条件为真,则输出下面的语句 */</span> Console.WriteLine(<span class="hljs-string">"a 小于 20"</span>); } <span class="hljs-keyword">else</span> { <span class="hljs-comment">/* 如果条件为假,则输出下面的语句 */</span> Console.WriteLine(<span class="hljs-string">"a 大于 20"</span>); } Console.WriteLine(<span class="hljs-string">"a 的值是 {0}"</span>, a); Console.ReadLine(); } } } |
当上面的代码被编译和执行时,它会产生下列结果:
|
1 2 3 |
a 大于 <span class="hljs-number">20</span> a 的值是 <span class="hljs-number">100</span> |
三、if…else if…else 语句
一个 if 语句后可跟一个可选的 else if...else 语句,这可用于测试多种条件。
当使用 if...else if...else 语句时,以下几点需要注意:
|
1 2 3 4 |
• 一个 if 后可跟零个或一个 else,它必须在任何一个 else if 之后。 • 一个 if 后可跟零个或多个 else if,它们必须在 else 之前。 • 一旦某个 else if 匹配成功,其他的 else if 或 else 将不会被测试。 |
C# 中的 if…else if…else 语句的语法:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<span class="hljs-keyword">if</span>(boolean_expression <span class="hljs-number">1</span>) { <span class="hljs-comment">/* 当布尔表达式 1 为真时执行 */</span> } <span class="hljs-function"><span class="hljs-keyword">else</span> <span class="hljs-title">if</span>(<span class="hljs-params"> boolean_expression <span class="hljs-number">2</span></span>) </span>{ <span class="hljs-comment">/* 当布尔表达式 2 为真时执行 */</span> } <span class="hljs-function"><span class="hljs-keyword">else</span> <span class="hljs-title">if</span>(<span class="hljs-params"> boolean_expression <span class="hljs-number">3</span></span>) </span>{ <span class="hljs-comment">/* 当布尔表达式 3 为真时执行 */</span> } <span class="hljs-keyword">else</span> { <span class="hljs-comment">/* 当上面条件都不为真时执行 */</span> } |
实例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<span class="hljs-keyword">using</span> System; <span class="hljs-keyword">namespace</span> <span class="hljs-title">DecisionMaking</span> { <span class="hljs-keyword">class</span> <span class="hljs-title">Program</span> { <span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Main</span>(<span class="hljs-params"><span class="hljs-keyword">string</span>[] args</span>) </span>{ <span class="hljs-comment">/* 局部变量定义 */</span> <span class="hljs-keyword">int</span> a = <span class="hljs-number">100</span>; <span class="hljs-comment">/* 检查布尔条件 */</span> <span class="hljs-keyword">if</span> (a == <span class="hljs-number">10</span>) { <span class="hljs-comment">/* 如果 if 条件为真,则输出下面的语句 */</span> Console.WriteLine(<span class="hljs-string">"a 的值是 10"</span>); } <span class="hljs-function"><span class="hljs-keyword">else</span> <span class="hljs-title">if</span> (<span class="hljs-params">a == <span class="hljs-number">20</span></span>) </span>{ <span class="hljs-comment">/* 如果 else if 条件为真,则输出下面的语句 */</span> Console.WriteLine(<span class="hljs-string">"a 的值是 20"</span>); } <span class="hljs-function"><span class="hljs-keyword">else</span> <span class="hljs-title">if</span> (<span class="hljs-params">a == <span class="hljs-number">30</span></span>) </span>{ <span class="hljs-comment">/* 如果 else if 条件为真,则输出下面的语句 */</span> Console.WriteLine(<span class="hljs-string">"a 的值是 30"</span>); } <span class="hljs-keyword">else</span> { <span class="hljs-comment">/* 如果上面条件都不为真,则输出下面的语句 */</span> Console.WriteLine(<span class="hljs-string">"没有匹配的值"</span>); } Console.WriteLine(<span class="hljs-string">"a 的准确值是 {0}"</span>, a); Console.ReadLine(); } } } |
当上面的代码被编译和执行时,它会产生下列结果:
|
1 2 3 |
没有匹配的值 a 的准确值是 <span class="hljs-number">100</span> |
四、嵌套if语句
在 C# 中,嵌套 if-else 语句是合法的,这意味着您可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。
C# 中 嵌套 if 语句的语法:
|
1 2 3 4 5 6 7 8 9 |
<span class="hljs-keyword">if</span>( boolean_expression <span class="hljs-number">1</span>) { <span class="hljs-comment">/* 当布尔表达式 1 为真时执行 */</span> <span class="hljs-keyword">if</span>(boolean_expression <span class="hljs-number">2</span>) { <span class="hljs-comment">/* 当布尔表达式 2 为真时执行 */</span> } } |
您可以嵌套 else if...else,方式与嵌套 if 语句相似。
实例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<span class="hljs-keyword">using</span> System; <span class="hljs-keyword">namespace</span> <span class="hljs-title">DecisionMaking</span> { <span class="hljs-keyword">class</span> <span class="hljs-title">Program</span> { <span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Main</span>(<span class="hljs-params"><span class="hljs-keyword">string</span>[] args</span>) </span>{ <span class="hljs-comment">//* 局部变量定义 */</span> <span class="hljs-keyword">int</span> a = <span class="hljs-number">100</span>; <span class="hljs-keyword">int</span> b = <span class="hljs-number">200</span>; <span class="hljs-comment">/* 检查布尔条件 */</span> <span class="hljs-keyword">if</span> (a == <span class="hljs-number">100</span>) { <span class="hljs-comment">/* 如果条件为真,则检查下面的条件 */</span> <span class="hljs-keyword">if</span> (b == <span class="hljs-number">200</span>) { <span class="hljs-comment">/* 如果条件为真,则输出下面的语句 */</span> Console.WriteLine(<span class="hljs-string">"a 的值是 100,且 b 的值是 200"</span>); } } Console.WriteLine(<span class="hljs-string">"a 的准确值是 {0}"</span>, a); Console.WriteLine(<span class="hljs-string">"b 的准确值是 {0}"</span>, b); Console.ReadLine(); } } } |
当上面的代码被编译和执行时,它会产生下列结果:
|
1 2 3 4 |
a 的值是 <span class="hljs-number">100</span>,且 b 的值是 <span class="hljs-number">200</span> a 的准确值是 <span class="hljs-number">100</span> b 的准确值是 <span class="hljs-number">200</span> |
五、switch 语句
一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。
C# 中 switch 语句的语法:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="hljs-keyword">switch</span>(expression){ <span class="hljs-keyword">case</span> constant-expression : statement(s); <span class="hljs-keyword">break</span>; <span class="hljs-keyword">case</span> constant-expression : statement(s); <span class="hljs-keyword">break</span>; <span class="hljs-comment">/* 您可以有任意数量的 case 语句 */</span> <span class="hljs-keyword">default</span> : <span class="hljs-comment">/* 可选的 */</span> statement(s); <span class="hljs-keyword">break</span>; } |
switch 语句必须遵循下面的规则:
switch语句中的expression必须是一个整型或枚举类型,或者是一个class类型,其中class有一个单一的转换函数将其转换为整型或枚举类型。- 在一个
switch中可以有任意数量的case语句。每个case后跟一个要比较的值和一个冒号。 case的constant-expression必须与switch中的变量具有相同的数据类型,且必须是一个常量。- 当被测试的变量等于
case中的常量时,case后跟的语句将被执行,直到遇到break语句为止。 - 当遇到
break语句时,switch终止,控制流将跳转到switch语句后的下一行。 - 不是每一个
case都需要包含break。如果case语句为空,则可以不包含break,控制流将会 继续 后续的case,直到遇到break为止。 - C# 不允许从一个开关部分继续执行到下一个开关部分。如果
case语句中有处理语句,则必须包含break或其他跳转语句。 - 一个
switch语句可以有一个可选的default case,出现在switch的结尾。default case可用于在上面所有case都不为真时执行一个任务。default case中的break语句不是必需的。 - C# 不支持从一个
case标签显式贯穿到另一个case标签。如果要使 C# 支持从一个case标签显式贯穿到另一个case标签,可以使用goto一个switch-case或goto default。
实例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<span class="hljs-keyword">using</span> System; <span class="hljs-keyword">namespace</span> <span class="hljs-title">DecisionMaking</span> { <span class="hljs-keyword">class</span> <span class="hljs-title">Program</span> { <span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Main</span>(<span class="hljs-params"><span class="hljs-keyword">string</span>[] args</span>) </span>{ <span class="hljs-comment">/* 局部变量定义 */</span> <span class="hljs-keyword">char</span> grade = <span class="hljs-string">'B'</span>; <span class="hljs-keyword">switch</span> (grade) { <span class="hljs-keyword">case</span> <span class="hljs-string">'A'</span>: Console.WriteLine(<span class="hljs-string">"很棒!"</span>); <span class="hljs-keyword">break</span>; <span class="hljs-keyword">case</span> <span class="hljs-string">'B'</span>: <span class="hljs-keyword">case</span> <span class="hljs-string">'C'</span>: Console.WriteLine(<span class="hljs-string">"做得好"</span>); <span class="hljs-keyword">break</span>; <span class="hljs-keyword">case</span> <span class="hljs-string">'D'</span>: Console.WriteLine(<span class="hljs-string">"您通过了"</span>); <span class="hljs-keyword">break</span>; <span class="hljs-keyword">case</span> <span class="hljs-string">'F'</span>: Console.WriteLine(<span class="hljs-string">"最好再试一下"</span>); <span class="hljs-keyword">break</span>; <span class="hljs-keyword">default</span>: Console.WriteLine(<span class="hljs-string">"无效的成绩"</span>); <span class="hljs-keyword">break</span>; } Console.WriteLine(<span class="hljs-string">"您的成绩是 {0}"</span>, grade); Console.ReadLine(); } } } |
当上面的代码被编译和执行时,它会产生下列结果:
|
1 2 3 |
做得好 您的成绩是 B |
六、嵌套 switch 语句
您可以把一个 switch 作为一个外部 switch 的语句序列的一部分,即可以在一个 switch 语句内使用另一个 switch 语句。即使内部和外部 switch 的 case 常量包含共同的值,也没有矛盾。
C# 中 嵌套 switch 语句的语法:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="hljs-keyword">switch</span>(ch1) { <span class="hljs-keyword">case</span> <span class="hljs-string">'A'</span>: printf(<span class="hljs-string">"这个 A 是外部 switch 的一部分"</span> ); <span class="hljs-keyword">switch</span>(ch2) { <span class="hljs-keyword">case</span> <span class="hljs-string">'A'</span>: printf(<span class="hljs-string">"这个 A 是内部 switch 的一部分"</span> ); <span class="hljs-keyword">break</span>; <span class="hljs-keyword">case</span> <span class="hljs-string">'B'</span>: <span class="hljs-comment">/* 内部 B case 代码 */</span> } <span class="hljs-keyword">break</span>; <span class="hljs-keyword">case</span> <span class="hljs-string">'B'</span>: <span class="hljs-comment">/* 外部 B case 代码 */</span> } |
实例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<span class="hljs-keyword">using</span> System; <span class="hljs-keyword">namespace</span> <span class="hljs-title">DecisionMaking</span> { <span class="hljs-keyword">class</span> <span class="hljs-title">Program</span> { <span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Main</span>(<span class="hljs-params"><span class="hljs-keyword">string</span>[] args</span>) </span>{ <span class="hljs-keyword">int</span> a = <span class="hljs-number">100</span>; <span class="hljs-keyword">int</span> b = <span class="hljs-number">200</span>; <span class="hljs-keyword">switch</span> (a) { <span class="hljs-keyword">case</span> <span class="hljs-number">100</span>: Console.WriteLine(<span class="hljs-string">"这是外部 switch 的一部分"</span>); <span class="hljs-keyword">switch</span> (b) { <span class="hljs-keyword">case</span> <span class="hljs-number">200</span>: Console.WriteLine(<span class="hljs-string">"这是内部 switch 的一部分"</span>); <span class="hljs-keyword">break</span>; } <span class="hljs-keyword">break</span>; } Console.WriteLine(<span class="hljs-string">"a 的准确值是 {0}"</span>, a); Console.WriteLine(<span class="hljs-string">"b 的准确值是 {0}"</span>, b); Console.ReadLine(); } } } |
当上面的代码被编译和执行时,它会产生下列结果:
|
1 2 3 4 5 |
这是外部 <span class="hljs-keyword">switch</span> 的一部分 这是内部 <span class="hljs-keyword">switch</span> 的一部分 a 的准确值是 <span class="hljs-number">100</span> b 的准确值是 <span class="hljs-number">200</span> |
七、?:运算符
我们已经在前面的章节中讲解了 条件运算符 ? :,可以用来替代 if...else 语句。它的一般形式如下:
|
1 2 |
Exp1 ? Exp2 : Exp3; |
其中,Exp1、Exp2 和 Exp3 是表达式。请注意,冒号的使用和位置。
? 表达式的值是由 Exp1 决定的。如果 Exp1 为真,则计算 Exp2 的值,结果即为整个 ? 表达式的值。如果 Exp1 为假,则计算 Exp3 的值,结果即为整个 ? 表达式的值。