2013-03-11 57 views
0

有人問我今天如何轉換以下if語句切換:轉換,如果「與範圍」,以switch語句

int i=5; 
if(i>10) 
{ 
    Do Something; 
} 
else 
{ 
    Do Something else; 
} 

我提出假設我是唯一正值整數:

int i=5; 
switch(i) 
{ 
    case 1: 
    case 2: 
    case 3: 
    case 4: 
    case 5: 
    case 6: 
    case 7: 
    case 8: 
    case 9: 
    case 10: Do Something else; 
    break; 
    case default: Do Something; 
    break; 
} 

有沒有其他更優雅的做法呢?

+0

[它似乎不那麼](http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/792582d0-2e36-40e3-873e-2be18337d074/)。 – tjameson 2013-03-11 06:22:34

回答

1

在C#中沒有直接的方法可以做到這一點,您可以嘗試以下操作。

int range = (number - 1)/10; 

switch(range) 
{ 
    case 0: 
     Console.WriteLine("1 to 10"); 
     break; 
    case 1: 
     Console.WriteLine("11 to 20"); 
     break; 
//.,...... 
    default: 
     break; 
} 

不能確定會是多少明確的是,國際海事組織,上述做法會降低代碼的可讀性,它的更好,如果你使用if-else的範圍檢查。此外,只有在範圍不變的情況下,上述纔有效。

1

首先,請注意您的兩個代碼示例(如最初寫的)是不等價的:

  • 你不是Do[ing] Something Else當你switch例如i==10
  • 但原始if代碼正在檢查i>10(而不是i>=10)。
  • 因此,case 10:應明確包含在case的列表中,該列表落入Do Something Else

要回答你的問題,我相信在一些語言(如帕斯卡,客觀C,我覺得呢?)一個範圍相似,這是允許的:

switch(i) 
{ 
    case 1-10: // or is it "case 1 .. 10" ? 
     Do Something else; 
     break; 
    case default: 
     Do Something; 
     break; 
} 

但這在C#中支持。請參閱代碼討論中關於「堆疊」這裏的案例標籤的最後一點MSDN switch(C#)

+0

感謝您指出。 – 2013-03-11 07:16:00