2014-09-19 8 views
6

Ich habe eine switch-Anweisung, die eine Zeichenfolge von 3 Buchstaben verwendet. Für viele Fälle (aber nicht alle) möchte ich mich nur mit den ersten beiden Buchstaben beschäftigen.Wie kann ich Platzhalter in einer switch-Anweisung verwenden?

Beispiel, möchte ich jeden Code, der mit „FF“ beginnt gleich behandelt werden:

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

Was kann ich hier tun? Kann ich einen Platzhalter verwenden? Muss ich jeden FF-Code berücksichtigen?

Aus offensichtlichen Gründen, ich will nicht Code wie diesen haben, die wirklich groß werden kann:

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

Antwort

5

Sie Ihre ersten 2 Zeichen an der switch, überhaupt nicht case.

Verwenden Sie den default Fall, um dann auf Fälle mit drei Buchstaben zurückzugreifen. Es ist nicht das sauberste, aber es würde funktionieren. Manchmal sind if Anweisungen der Weg zu gehen, wenn Schalter es nicht schneiden.

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

Aber manchmal muss ich alle drei Buchstaben behandeln. – AdamMc331

+1

Dies behandelt nicht einige der Fälle - er erwähnt "(aber nicht alle)" im Text ... –

+0

@ McAdam331 Fixed. –

1

Die Switch-Anweisung in C# unterstützt dies nicht. Sie müssten stattdessen if/else-Anweisungen verwenden:

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

Verwenden if then else für diese Art von Vergleichen. Reservieren Sie Ihre switchcase Anweisungen für Fälle, die leicht als diskrete Werte identifiziert werden können.

+0

Obwohl nichts nicht-diskrete Werte verhindert (nicht, dass Sie dies impliziert), ist es sicherlich lesbarer, wartbar und verständlich, wenn sie diskret sind. –

2

nur einen ternären Operator in der Anweisung Schalter verwenden

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

    case "FAS": 

    case "FAY" 

    // etc. 
} 

für Multiples, dies zu tun:

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

Das würde funktionieren, wenn die einzige Zwei-Buchstaben-Prüfung für "FF" wäre, aber es würde ziemlich hässlich werden, wenn Sie nach mehreren Zwei-Buchstaben-Fällen suchen möchten. –

+0

Ja, aber ich postuliere immer noch sauberer als mehrere verschachtelte If Else if-Anweisungen –

+0

Ich mag das auch sehr. Ich denke, ich könnte das Gegenteil tun, da 3-Buchstaben-Fälle seltener werden. Ich könnte sagen "switch (code.Equals (" ABC ")? Code: code.Teilzeichenfolge (0,2) 'und es wäre nicht schrecklich überladen. – AdamMc331

Verwandte Themen