dotNETcsharp

C# Learning:选择语句

2020-04-01  本文已影响0人  月银秋

if 语句(if-else)

if语句根据bool值来识别运行哪个语句。if语句基本形式如下:

A
if(M)
    B
else
    C
D

其中M是一个bool表达式(比如bool类型的变量,比如调用具有bool类型返回值的方法,常见的有“a > 1”)。程序是这样执行的:

A
if(M)
    B
C

程序这样执行:

if(M)
    A
else if(N)
    B
else if(O)
    C
else if(P)
    D
...
else
    E

此时会依次从M、N、O、P、……判断下来,如果判断到true,则执行对应的代码,并且立即跳出整个if语句;如果全是false,则执行E。也就是说,在A、B、C、D、……、E中只可能有一段代码被执行了。
同样,else部分也是可选的,此时如果全都是false则没有任何一段会被执行。

switch语句(switch-case)

在此我们介绍的是C#6及之前的switch语句(C#7.0之后的switch比较复杂,放这里不太合适),基本语法如:

switch (A)
{
    case C1:
        S1
    case C2:
        S2
    case C3:
        S3
    ...
    default:
        D
}

其中C1、C2、C3、……必须是常数,且值互不相等;A和C1、C2、C3、……必须是字符型、字符串、bool、整数值(例如 int 或 long)或者枚举值。
由于C1、C2、C3、……必须值互不相等,因此A最多与其中之一相等,那么就从它对应的标签“case C1”、“case C2”、“case C3”开始执行……而若与其中任何一个都不相等,将转到default。
与else类似,default也是可选的,如果与任何一个都不相等,又无default,switch中的语句一个都不会执行。
switch中的“case C1”等等属于标签,因此并不是说S1结束之后就会停止,按道理来说会继续执行S2,直到全部都执行过。在C++中的确是允许如此的。为了解决这样的问题,可以使用比如return、goto等跳转语句进行跳转,这个可以参考我的另一篇文章《C# Learning:跳转语句》。但是这两个跳转方式还是比较麻烦,于是break语句的一个用法就产生了。

switch (A)
{
    case C1:
        S1
        break;
    case C2:
        S2
        break;
    case C3:
        S3
        break;
    ...
    default:
        D
        break;
}

这里的break就表示离开整个switch语句,就不会出现继续往后执行的情况。
要注意,不添加跳转语句的做法在C中是允许的,但在C#中为了确保不出现忘记写break等问题,这样的做法不被允许,它会被视为编译时错误。如果需要在某个case结束后执行另一个case,可以使用goto语句。

上一篇 下一篇

猜你喜欢

热点阅读