C和C++語(yǔ)言允許switch語(yǔ)句中case標(biāo)簽后不出現(xiàn)break語(yǔ)句從而可以繼續(xù)執(zhí)行下面case后的語(yǔ)句。但是這往往由于程序員忘記寫break語(yǔ)句而成為一個(gè)難以發(fā)現(xiàn)的漏洞,所以C#不允許這樣,它要求每個(gè)標(biāo)簽項(xiàng)后使用break語(yǔ)句或跳轉(zhuǎn)語(yǔ)句goto,即不允許從一個(gè)case自動(dòng)遍歷到其他case,否則編譯時(shí)報(bào)錯(cuò),即使是default語(yǔ)句后也不例外。
這個(gè)特定決定了三個(gè)特點(diǎn):
a)我們可以任意排列switch語(yǔ)句中的case項(xiàng)而不會(huì)影響switch語(yǔ)句的功能。
b)如果要像c/c++那樣在執(zhí)行完后繼續(xù)遍歷其他的語(yǔ)句,只要在case語(yǔ)句后加上以下兩條跳轉(zhuǎn)語(yǔ)句中的一條即可:goto case label;goto default。
C)除了goto外,throw和return也可以。
C#switch語(yǔ)句與C/C++另一個(gè)不同點(diǎn)是C#同VB一樣把字符串常量當(dāng)作常量表達(dá)式來(lái)使用,但C/C++卻不支持。所以在C#中,case “OK”:這樣的形式也是支持的。
這個(gè)特定決定了三個(gè)特點(diǎn):
a)我們可以任意排列switch語(yǔ)句中的case項(xiàng)而不會(huì)影響switch語(yǔ)句的功能。
b)如果要像c/c++那樣在執(zhí)行完后繼續(xù)遍歷其他的語(yǔ)句,只要在case語(yǔ)句后加上以下兩條跳轉(zhuǎn)語(yǔ)句中的一條即可:goto case label;goto default。
C)除了goto外,throw和return也可以。
C#switch語(yǔ)句與C/C++另一個(gè)不同點(diǎn)是C#同VB一樣把字符串常量當(dāng)作常量表達(dá)式來(lái)使用,但C/C++卻不支持。所以在C#中,case “OK”:這樣的形式也是支持的。