看來我需要在使用C#的switch語句中的每種情況下使用中斷。C#switch/break
我可以看到其他語言的原因,你可以通過下一個case語句。
案例塊是否可能落入其他案例塊?
非常感謝,非常感謝!
看來我需要在使用C#的switch語句中的每種情況下使用中斷。C#switch/break
我可以看到其他語言的原因,你可以通過下一個case語句。
案例塊是否可能落入其他案例塊?
非常感謝,非常感謝!
是的,你可以通過兩種方式進入下一個案例塊。您可以使用空的情況下,這並不需要休息,也可以使用goto
跳轉到下一個(或任何)情況:
switch (n) {
case 1:
case 2:
case 3:
Console.WriteLine("1, 2 or 3");
goto case 4;
case 4:
Console.WriteLine(4);
break;
}
C#不支持通過構造隱式下降,但break
(或goto
)仍然在那裏(msdn)。你能做的唯一的事情是堆棧情況如下方式:
switch(something) {
case 1:
case 2:
//do something
break;
case 3:
//do something else
}
但break
(或類似goto
另一個跳轉語句),只需要在那裏。
這不太準確。這不是一個「跳躍」聲明(我認爲你的意思是休息,繼續,轉身,返回或拋出)必須在最後,這是一個終點不可達的聲明。所有的「跳轉」語句都有這個屬性,但也有其他的屬性聲明。例如,雖然很少,但用「while(true)M()」結束開關部分是完全合法的;「 – 2009-11-25 15:54:46
我看到MSDN文檔不正確。我會和文檔管理員談一談。 – 2009-11-25 15:55:40
的「破發」的執法是有停止的錯誤。如果您需要強制下降得來速然後用「的goto case」(替換用適當的值)
如下例所示,你可以做什麼:
switch(n)
{
case 1:
case 2:
//do something for 1+2
//...
goto case 3;
case 3:
//do something for 3, and also extra for 1+2
//...
break;
default:
//do something for all other values
//...
break;
}
見http://msdn.microsoft.com/en-us/library/06tc147t%28VS.80%29.aspx
如果它不支持通過,那麼就沒有可以防止的錯誤。無論是否有休息,如果語言不支持通過,它不支持它,底線。編譯'break'的時間執行;'並不妨礙你意外地通過,因爲正如你所說,通過甚至不支持,所以這樣的事故不會發生... – AaronLS 2014-05-06 19:17:04
在我C#(.NET 1.1,CF)的代碼,這兩個被允許:
switch (_printerChoice)
{
case BeltPrintersEnum.ZebraQL220:
return new ZebraQL220Printer();
break;
case BeltPrintersEnum.ONeal:
return new ONealPrinter();
break;
default:
return new ZebraQL220Printer();
break;
}
switch (_printerChoice)
{
case BeltPrintersEnum.ZebraQL220:
return new ZebraQL220Printer();
case BeltPrintersEnum.ONeal:
return new ONealPrinter();
default:
return new ZebraQL220Printer();
}
...但在,他們是灰色的休息時間,所以認爲沒有實際意義。所以,至少在我的情況下,他們被允許但不是必需的。
返回語句(以及拋出異常)原因離開完整方法的代碼,這就是爲什麼不需要下面的break語句的原因。沒有開關結構要離開了。 – Udontknow 2016-11-21 11:08:20
空案例陳述不合法,'case 1'不能反駁這一點。參見[Eric Lippert的解釋](http://stackoverflow.com/questions/3047863/how-can-i-use-more-than-one-constant-for-a-switch-case-in-c/3049601#3049601 ),以及我的評論,提到爲什麼區別不是迂腐。告訴人們空白區塊是合法的[導致他們犯錯誤](http://stackoverflow.com/q/8071655/18192)。 – Brian 2011-11-09 21:50:17
@Brian:如果你喜歡,你可以稱它爲別的東西,但上面的代碼是完全合法的。從技術上講,代碼當然不會作爲一系列代碼塊來實現,但在任何語言中都不是這樣,對於大多數控制結構也是如此。你鏈接的錯誤根本不涉及空例(或者你喜歡稱之爲的任何東西),因爲它不是空的。 – Guffa 2011-11-09 22:19:11