2013-01-10 47 views
2

是否有可能增加一個附加的條件在C#添加附加條件Case語句在開關

switch(MyEnum) 
{ 
    case 1: 
    case 2: 
    case 3 && Year > 2012://Additional Condtion Here 
     //Do Something here.......... 
     break; 
    case 4: 
    case 5: 
     //Do Something here.......... 
     break; 
} 

到交換機象下面陳述在上面提到的例子中,如果MyEnum = 3那麼它必須被excuted如果年> 2012 ...可能嗎?

[EDITED]

年份> 2012是不適用到外殼1 &殼體2

回答

7

爲了它的工作你的方式」 VE與下通邏輯表示爲1和2,我建議出移動//do something here部分的方法或函數,然後這樣做:

case 1: 
    case 2: 
     DoSomething(); break; 
    case 3: 
     if(Year > 2012) { DoSomething(); } 
     break; 

另一種選擇是:

case 1: 
    case 2: 
    case 3: 
     if (MyEnum != 3 || Year > 2012) { 
     // Do something here 
     } 
     break; 

但我認爲第一個選項更直觀和可讀。

+0

你解決方案是完美的...........我認爲它可以用其他方式處理也可以減少代碼的重複。 – andy

1

不能添加條件的情況。 Case子句必須是編譯時間常量。相反,您可以在case語句中使用if語句。

case 3: 
     if(> 2012) 
     { 
     //Do Something here.......... 
     } 
break; 
+0

在這種情況下,代碼可能爲案例1,2和案例是repeatative 3. – andy

+0

@Anandkumar如果> 2012條件適用於許多或所有case語句,你可以包裝SWICH在'if' –

+0

@Anandkumar,不,它會首先比較MyEnum,如果它是3,那麼它將跳轉到case語句3,它將檢查年份。如果你必須檢查所有情況下的年份,那麼在開關 – Habib

0

你必須使用if條件機殼內,你不能在case語句中使用& &,使用如下:

switch(MyEnum) 
{ 
    case 1: 
    case 2: 
    case 3: //Additional Condtion Here 
    if (Year > 2012) 
    {  
     //Do Something here.......... 
    } 
    break; 
    case 4: 
    case 5: 
     //Do Something here.......... 
     break; 
} 
+0

是否如果條件適用於所有的案件或只有一些案件?????? –

+1

他希望Year> 2012只適用於案例:3. – JLRishe

+0

那麼最新的問題是什麼? –

4

答案是否定的。

你需要執行以下操作:

switch (MyEnum) 
{ 
    case 1: 
    case 2: 
     DoSomething(); 
     break; 
    case 3: 
     if (Year > 2012) DoSomething(); 
     break; 
} 
+0

+1注意。 – JLRishe

0

,或者,你可以將條件添加到交換機:

switch (MyEnum!=3 || Year>2012 ? MyEnum : -1) 
{ 
    case 1: 
    case 2: 
    case 3: 
     //Do Something here.......... 
     break; 
    case 4: 
    case 5: 
     //Do Something here.......... 
     break; 
} 
1

C#7的新功能:

情況。 ..當

https://docs.microsoft.com/hu-hu/dotnet/articles/csharp/whats-new/csharp-7

public static int DiceSum4(IEnumerable<object> values) 
{ 
    var sum = 0; 
    foreach (var item in values) 
    { 
     switch (item) 
     { 
      case 0: 
       break; 
      case int val: 
       sum += val; 
       break; 
      case IEnumerable<object> subList when subList.Any(): 
       sum += DiceSum4(subList); 
       break; 
      case IEnumerable<object> subList: 
       break; 
      case null: 
       break; 
      default: 
       throw new InvalidOperationException("unknown item type"); 
     } 
    } 
    return sum; 
}