2012-12-18 27 views
9

我想使用的switch case代替If Else聲明,在我所到的字符串的第一次檢查長度,按我不得不作出的它的情況。開關的情況下用整數表達式

switch (mystring.length) 
{ 
    case <=25: 
    { 
     //do this 
     break; 
    } 
    case <50: 
    { 
     //do this 
     break; 
    } 
    default: 
     break; 
} 

這是一些事情我想要做的,但無法獲得如何把<25的情況下,前面的,因爲它是不恰當的按開關的情況下的規則。

+4

你爲什麼要使用'之開關完成這個任務?爲什麼'如果'對你不好? – horgh

+0

http://www.dotnetperls.com/switch 開關情況需要每種情況下是恆定.... –

+0

請閱讀[MSDN開關(C#參考)](http://msdn.microsoft.com/en-us /library/06tc147t%28v=vs.90%29.aspx)。 – horgh

回答

13

它總是更好地使用if/else爲你的特定情況,使用switch語句你不能在條件的情況下。它看起來像你檢查的範圍,如果範圍內是恆定的,那麼你可以嘗試以下(如果你想使用switch語句)

int Length = mystring.Length; 
int range = (Length - 1)/25; 
switch (range) 
{ 
    case 0: 
     Console.WriteLine("Range between 0 to 25"); 
     break; 
    case 1: 
     Console.WriteLine("Range between 26 to 50"); 
     break; 
    case 2: 
     Console.WriteLine("Range between 51 to 75"); 
     break; 

} 
+0

如果範圍= 22/25怎麼辦???????它將轉到默認情況而不是第一種情況。 – neerajMAX

+1

@neerajMAX,如果長度是'22',那麼它將進入第一種情況,因爲'(22-1)/ 25'是'0',它的整數除法:) – Habib

+1

oopsss !!!你是正確的....:P thankx :) – neerajMAX

2

你不能用switch做到這一點,但有可能是一個辦法解決這個。

Dictionary<int, Action> actions = new Dictionary<int, Action>() 
    { 
     {25,()=>Console.WriteLine("<25")}, 
     {49,()=>Console.WriteLine("<50")}, 
     {int.MaxValue,()=>Console.WriteLine("Default")}, 
    }; 


actions.First(kv => mystring.length < kv.Key).Value(); 
+1

此解決方案可以擴展爲更通用。 Tuple的第一個元素可以是類型Func 以提供更一般的匹配。 –

+1

我不認爲這是可靠的。 [沒有爲'Dictionary's(http://stackoverflow.com/a/4007787/382780)定義的順序,因此可以選擇任何有效的對,而不僅僅是「第一個」。這應該是'Tuple '的清單,以便評估有序。 – 31eee384

2

試試這個:

int range = (int) Math.Floor(mystring.Length/25); 

switch (range) { 
case 0: 

    //do this <= 25 
    break; 

case 1: 

    //do this < 50 & > 25 
    break; 

default: 
    break; 
}​ 
+0

如果我在代碼中看到這個,我會非常困惑,並質疑使用'data'。 – Default

2

這確實不利於OP不多,但希望這將幫助別人的未來尋找這一點。

如果您正在使用C#7(可在Visual Studio 2017年),你可以switch on a range

例子:

switch (mystring.length) 
{ 
    case int n when (n >= 0 && n <= 25): 
    //do this 
    break; 

    case int n when (n >= 26 && n <= 50): 
    //do this 
    break; 
}