C# 流程控制分支 switch 語句
switch語句非常類似于if語句,因?yàn)樗彩歉鶕?jù)測試的值來有條件地執(zhí)行代碼。但是,switch語句可以一 次將測試變量與多個(gè)值進(jìn)行比較,而不是僅測試一個(gè)條件。這種測試僅限于離散的值,而不是像“大于X”這 樣的子句,所以它的用法有點(diǎn)不同,但它仍是一種強(qiáng)大的技術(shù)。 switch語句的越本結(jié)構(gòu)如下:
switch (〈testier〉)
{
case <comparisonVall>:
<code to execute if <testVar> 一一 <comparisonVall> >
break;
case <comparisonVal2>:
<code to execute if <testVar> == <comparisonVa12> >
break;
. . .
case <comp3risonVcilN>:
<code to execute if <testVar> == <comparisonValN> >
break;
default:
<code to execute if <testVar> != comparlsonVals>
break;
}
<testVar>中的值與每個(gè)值(在case語句中指定)進(jìn)行比較,如果有一個(gè)匹配,就執(zhí)行為該 匹配提供的語句。如果沒有匹配,但有default語句,就執(zhí)行default部分的代碼。
執(zhí)行完每個(gè)部分的代碼后,還需要有另一個(gè)語句break。在執(zhí)行完一個(gè)case塊后,再執(zhí)行第二個(gè)case語句 是非法的。
注意:
在此,C#與O+是有區(qū)別的s在C++中,可以在運(yùn)行完一個(gè)case語句后,運(yùn)行另一個(gè)case語句。
這里的break語句將中斷switch語句的執(zhí)行,而執(zhí)行該結(jié)構(gòu)后面的語句。
在C#代碼中,還有其他方法可以防止程序流程從一個(gè)case語句轉(zhuǎn)到下一個(gè)case語句??梢允褂胷etum語 句,中斷當(dāng)前函數(shù)的運(yùn)行,而不是僅中斷switch結(jié)構(gòu)的執(zhí)行(詳見第6章)。也可以使用goto語句(如前所述), 因?yàn)閏ase語句實(shí)際上是在C#代碼中定義的標(biāo)簽。例如:
switch (<testVar>)
{
case <comparisonVall>:
<code to execute if <testVar> == <comparisonVa11> >
goto case <comparisonVa12> 7
case <comparisonJ:
<code to execute if <testVar> == <comparisonVal2> >
break;
. . .
一個(gè)case語句處理完畢后,不能自由進(jìn)入下一個(gè)case語句,但這條規(guī)則有一個(gè)例外。如果把多個(gè)case語
句放在一起(堆疊它們),其后加一個(gè)代碼塊,實(shí)際上是一次檢查多個(gè)條件。如果滿足這些條件中的任何一個(gè), 就會執(zhí)行代碼,例如:
switch (<testVar>)
{
case <comparisonVall>: case <comparisonVal2>:
<code to execute if <testVar> == <comparisonVall> or <testVar> == <comparisonVal2> >
break;
注意,這些條件也適用于default語句0 default語句不一定要放在比較操作列表的最后,還可以把它和case 語句放在一起。用break或return添加一個(gè)斷點(diǎn),可確保在任何情況下,該結(jié)構(gòu)都有一條有效的執(zhí)行路徑。 在下面的示例中,將使用switch語句,根據(jù)用戶為測試字符串輸入的值,將不同字符串寫到控制臺。
點(diǎn)擊加載更多評論>>