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
的值,结果即为整个 ?
表达式的值。