2009-11-25 118 views
0

我會切入正題。我有兩個關於開關的問題很簡單,但我無法弄清楚。c#switch語句問題

第一:

在C#中的switch語句

,做case語句必須是連續的(與整數)?

例如:

switch(someInt) 
{ 
    case 1 
    // some code 
    case 2 
    // some code 
    case 3 
    // some code 
} 

或是否有可能做一些這樣的:

switch(someInt) 
{ 
    case 1 
    case 3 
    case 5 
} 

我知道,正常的if-else被用於類似的語句,但我我只是好奇地想知道它是否可能。

此外,它是否被認爲是在案件陳述中使用實際數字的幻數?或者是更好的做法來聲明用於case語句的常量?

謝謝!

編輯:

感謝大家對您的回覆!我很感激。

+0

作爲一個不錯的學術努力,我會鼓勵你下載反射器,並看看你的switch語句被編譯成什麼。 – Josh 2009-11-25 04:03:46

回答

0

case語句的值絕對不需要連續。

你也沒有綁定到只使用整數值。絃樂也一樣。

如果您擔心幻數,最好的辦法是創建一個枚舉。它會傳達這些神奇數字的意義。否則,有它並享受。

0

它們不必是連續的。儘管我只是爲了清楚起見而這樣做。

1

他們可以以任何你想要的順序。不,使用實際數字並不總是不好的。但不是幻數。如果你是一個比較int,如可能

switch (numberOfItems) 
{ 
    case 0: 
     break; 
    case 1: 
     break; 
    default: 
     break; 
} 

使用數字(當然,這只是一個例子,我無法想象在現實世界中看到這個代碼)

0

順序並不重要,編譯器會爲你做這個工作。

我更喜歡使用枚舉或const int來爲數字提供含義,特別是當它由其他人維護時。

+0

取決於有關號碼的目的。例如,我已經打開計數。我真的需要在這裏列舉嗎? – 2009-11-25 04:03:33

0

它可以做到這一點。語法是這樣的:(你接近)

switch(someInt) 
{ 
    case 1: 
    // some code 
    break; 

    case 2: 
    // some code 
    break; 

    case 3: 
    // some code 
    break; 

    default: 
    // code for "else" case 
    break; 
} 
or is it possible to do something like the following: 

switch(someInt) 
{ 
    case 1: 
    case 3: 
    case 5: 
    // some code 
    break; 
} 

注意冒號和break秒。

至於神奇數字的使用,一般來說,我更喜歡將常量放在文字中,但我對明顯的數字例外,例如檢查因子可分性的最小數字是2。

+0

拿到了我的徽章!感謝downmod! :D – 2009-11-25 08:03:22

0

作爲一種小型優化,您可以根據實際/預期頻率對您的案例值進行排序。我還會添加一個「默認」的例子,這樣你就可以很容易地發現你使用枚舉的地方,並忘記解釋它。這是使用枚舉值而不是常量的另一個原因。

+0

我認爲對於整數,所有分支都是恆定的時間,不管順序如何。我沒有來源,但有人確定嗎? – recursive 2009-11-25 04:04:23