2014-09-19 43 views
6

我有一個switch語句,使用3個字母的字符串。對於很多情況(但不是全部),我只想關注前兩個字母。如何在switch語句中使用通配符?

例如,我想所有以「FF」開頭的代碼來處理相同的:

switch(code) 
{ 
    case "FF(?)": 
     // Handle it 
     break; 
    default: 
     break; 
} 

我能做些什麼嗎?我可以使用通配符嗎?我是否需要考慮每個FF代碼?

出於顯而易見的原因,我不希望有這樣的代碼,可以長出真正的大:

case "FFA": 
case "FFB": 
case "FFD": 
    // Handle it 

回答

5

做你的第一個2個字符在switch,而不是在case

使用default情況,然後回落到三個字母的情況。這不是最乾淨的,但它會起作用。如果交換機不切斷它,有時候需要使用if語句。

switch(code.Substring(0, 2)) 
{ 
    case "FF": 
     ... 
    default: 
     switch(code) 
     { 
      case "ABC": 
       .... 
     } 
} 
+2

但有時我需要處理所有3個字母。 – AdamMc331 2014-09-19 19:58:33

+1

這不處理一些案件 - 他在文中提到「(但不是全部)」... – 2014-09-19 19:58:41

+0

@ McAdam331固定。 – 2014-09-19 20:00:01

1

C#中的Switch語句不支持這一點。你可能會需要使用if/else語句來代替:

if (code.StartsWith("FF")) 
{ 
    // Handle it 
} 
else if (code == "HFD") // etc 
{ 
    // Handle it 
} 
else 
{ 
    // default case 
} 
5

使用if then else這些類型的比較。對於易於識別爲離散值的情況,請保留您的switchcase聲明。

+0

雖然沒有什麼可以防止非離散值(並非您所暗示的那樣),但它們當離散時肯定更易於理解,可維護且易於理解。 – 2014-09-19 20:01:45

2

只使用一個三元運算switch語句

switch (code.StartsWith("FF")? code.substring(0,2): code) 
{ 
    case "FF": 

    case "FAS": 

    case "FAY" 

    // etc. 
} 

的倍數,這樣做:

switch (new[] {"FF", "GG", "HH", "JJ"}.Contains(code.substring(0,2))? 
        code.substring(0,2): code) 
{ 
    case "FF": 
    case "GG": 
    case "HH": 
    case "JJ": 

    case "FAS": 

    case "FAY" 

    // etc. 
} 
+1

如果只有兩個字母檢查是用於「FF」,那麼這將起作用,但是如果您想要檢查多個2個字母的病例,它會變得相當難看。 – 2014-09-19 20:08:30

+0

是的,但我認爲仍然比多重嵌套如果其他if if語句 – 2014-09-19 20:09:16

+0

我更喜歡這個。我想我可以做相反的事情,因爲3個字母的情況會更加罕見。我可以說'switch(code.Equals(「ABC」)?code:code。子字符串(0,2)',它不會非常混亂。 – AdamMc331 2014-09-19 20:10:17