分享
 
 
 

15.7 Selection statements

王朝other·作者佚名  2006-05-06
窄屏简体版  字體: |||超大  

Selection statements select one of a number of possible statements for

execution based on the value of some

expression.

selection-statement:

if-statement

switch-statement

15.7.1 The if statement

The if statement selects a statement for execution based on the value of a

boolean expression.

if-statement:

if ( boolean-expression ) embedded-statement

if ( boolean-expression ) embedded-statement else embedded-statement

boolean-expression:

expression

An else part is associated with the lexically nearest preceding if that is

allowed by the syntax. [Example:

Thus, an if statement of the form

if (x) if (y) F(); else G();

is equivalent to

Chapter 15 Statements

183

if (x) {

if (y) {

F();

}

else {

G();

}

}

end example]

An if statement is executed as follows:

? The boolean-expression (§14.16) is evaluated.

? If the boolean expression yields true, control is transferred to the

first embedded statement. When and

if control reaches the end point of that statement, control is transferred

to the end point of the if

statement.

? If the boolean expression yields false and if an else part is present,

control is transferred to the

second embedded statement. When and if control reaches the end point of

that statement, control is

transferred to the end point of the if statement.

? If the boolean expression yields false and if an else part is not

present, control is transferred to the

end point of the if statement.

The first embedded statement of an if statement is reachable if the if

statement is reachable and the

boolean expression does not have the constant value false.

The second embedded statement of an if statement, if present, is reachable

if the if statement is reachable

and the boolean expression does not have the constant value true.

The end point of an if statement is reachable if the end point of at least

one of its embedded statements is

reachable. In addition, the end point of an if statement with no else part

is reachable if the if statement is

reachable and the boolean expression does not have the constant value true.

15.7.2 The switch statement

The switch statement selects for execution a statement list having an

associated switch label that corresponds

to the value of the switch expression.

switch-statement:

switch ( expression ) switch-block

switch-block:

{ switch-sectionsopt }

switch-sections:

switch-section

switch-sections switch-section

switch-section:

switch-labels statement-list

switch-labels:

switch-label

switch-labels switch-label

switch-label:

case constant-expression :

default :

A switch-statement consists of the keyword switch, followed by a

parenthesized expression (called the

switch expression), followed by a switch-block. The switch-block consists

of zero or more switch-sections,

C# LANGUAGE SPECIFICATION

184

enclosed in braces. Each switch-section consists of one or more

switch-labels followed by a statement-list

(§15.2.1).

The governing type of a switch statement is established by the switch

expression. If the type of the switch

expression is sbyte, byte, short, ushort, int, uint, long, ulong, char,

string, or an enum-type,

then that is the governing type of the switch statement. Otherwise, exactly

one user-defined implicit

conversion (§13.4) must exist from the type of the switch expression to

one of the following possible

governing types: sbyte, byte, short, ushort, int, uint, long, ulong, char,

string. If no such

implicit conversion exists, or if more than one such implicit conversion

exists, a compile-time error occurs.

The constant expression of each case label must denote a value of a type

that is implicitly convertible

(§13.1) to the governing type of the switch statement. A compile-time

error occurs if two or more case

labels in the same switch statement specify the same constant value.

There can be at most one default label in a switch statement.

A switch statement is executed as follows:

? The switch expression is evaluated and converted to the governing type.

? If one of the constants specified in a case label in the same switch

statement is equal to the value of

the switch expression, control is transferred to the statement list

following the matched case label.

? If none of the constants specified in case labels in the same switch

statement is equal to the value of

the switch expression, and if a default label is present, control is

transferred to the statement list

following the default label.

? If none of the constants specified in case labels in the same switch

statement is equal to the value of

the switch expression, and if no default label is present, control is

transferred to the end point of the

switch statement.

If the end point of the statement list of a switch section is reachable, a

compile-time error occurs. This is

known as the ?no fall through? rule. [Example: The example

switch (i) {

case 0:

CaseZero();

break;

case 1:

CaseOne();

break;

default:

CaseOthers();

break;

}

is valid because no switch section has a reachable end point. Unlike C and

C++, execution of a switch

section is not permitted to ?fall through? to the next switch section, and

the example

switch (i) {

case 0:

CaseZero();

case 1:

CaseZeroOrOne();

default:

CaseAny();

}

results in a compile-time error. When execution of a switch section is to

be followed by execution of another

switch section, an explicit goto case or goto default statement must be

used:

Chapter 15 Statements

185

switch (i) {

case 0:

CaseZero();

goto case 1;

case 1:

CaseZeroOrOne();

goto default;

default:

CaseAny();

break;

}

end example]

Multiple labels are permitted in a switch-section. [Example: The example

switch (i) {

case 0:

CaseZero();

break;

case 1:

CaseOne();

break;

case 2:

default:

CaseTwo();

break;

}

is valid. The example does not violate the ?no fall through? rule because

the labels case 2: and default:

are part of the same switch-section. end example]

[Note: The ?no fall through? rule prevents a common class of bugs that

occur in C and C++ when break

statements are accidentally omitted. In addition, because of this rule, the

switch sections of a switch

statement can be arbitrarily rearranged without affecting the behavior of

the statement. For example, the

sections of the switch statement above can be reversed without affecting

the behavior of the statement:

switch (i) {

default:

CaseAny();

break;

case 1:

CaseZeroOrOne();

goto default;

case 0:

CaseZero();

goto case 1;

}

end note]

[Note: The statement list of a switch section typically ends in a break,

goto case, or goto default

statement, but any construct that renders the end point of the statement

list unreachable is permitted. For

example, a while statement controlled by the boolean expression true is

known to never reach its end

point. Likewise, a throw or return statement always transfers control

elsewhere and never reaches its end

point. Thus, the following example is valid:

switch (i) {

case 0:

while (true) F();

case 1:

throw new ArgumentException();

case 2:

return;

}

end note]

[Example: The governing type of a switch statement may be the type string.

For example:

C# LANGUAGE SPECIFICATION

186

void DoCommand(string command) {

switch (command.ToLower()) {

case "run":

DoRun();

break;

case "save":

DoSave();

break;

case "quit":

DoQuit();

break;

default:

InvalidCommand(command);

break;

}

}

end example]

[Note: Like the string equality operators (§14.9.7), the switch statement

is case sensitive and will execute a

given switch section only if the switch expression string exactly matches a

case label constant. end note]

When the governing type of a switch statement is string, the value null is

permitted as a case label

constant.

The statement-lists of a switch-block may contain declaration statements (§1

5.5). The scope of a local

variable or constant declared in a switch block is the switch block.

Within a switch block, the meaning of a name used in an expression context

must always be the same

(§14.5.2.1).

The statement list of a given switch section is reachable if the switch

statement is reachable and at least

one of the following is true:

? The switch expression is a non-constant value.

? The switch expression is a constant value that matches a case label in

the switch section.

? The switch expression is a constant value that doesn?t match any case

label, and the switch section

contains the default label.

? A switch label of the switch section is referenced by a reachable goto

case or goto default

statement.

The end point of a switch statement is reachable if at least one of the

following is true:

? The switch statement contains a reachable break statement that exits the

switch statement.

? The switch statement is reachable, the switch expression is a

non-constant value, and no default

label is present.

? The switch statement is reachable, the switch expression is a constant

value that doesn?t match any

case label, and no default label is present.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有