Wenn Sie die Länge der Bedingungen wusste, dass Sie alles über sein die gleiche Länge dann könnten Sie sich kümmern würde:
switch(mystring.substring(0, Math.Min(3, mystring.Length))
{
case "abc":
//do something
break;
case "xyz":
//do something else
break;
default:
//do a different thing
break;
}
Die Math.Min(3, mystring.Length)
gibt es so, dass eine Reihe von weniger als 3 Zeichen nicht werfen eine Ausnahme bei der Sub-String-Operation.
Es gibt Erweiterungen dieser Technik, um z.B. eine Reihe von 2-Zeichen-Strings und eine Reihe von 3-Zeichen-Strings, bei denen nach einigen Übereinstimmungen mit 2-Zeichen-Vergleichen 3-Zeichen-Vergleiche folgen. Es sei denn, Sie haben eine sehr große Anzahl solcher Strings, aber es wird schnell weniger effizient als einfach, wenn Sie für den laufenden Code und die Person, die es pflegen muss.
Bearbeiten: Hinzugefügt, da Sie jetzt angegeben haben, dass sie unterschiedlich lang sein werden. Sie könnten das Muster tun, das ich erwähnt habe, die ersten X-Zeichen und dann die nächsten Y-Zeichen zu überprüfen, aber wenn es ein Muster gibt, bei dem die meisten Zeichenfolgen die gleiche Länge haben, ist dies sowohl ineffizient als auch schrecklich vorzeitige Pessimierung).
Das Befehlsmuster wird in einer anderen Antwort erwähnt, deshalb werde ich keine Details dazu angeben, ebenso wie das, wo Sie String-Muster IDs zuordnen, aber sie sind eine Option.
würde ich nicht von ändern if-else-Ketten oder Mapping-Muster zu befehlen, die Effizienz Schalter zu gewinnen manchmal if-else hat über, wie Sie mehr in dem Vergleichen für den Befehl oder den Erhalt des ID-Musters verlieren. Ich würde es tun, wenn es den Code klarer macht.
Eine Kette von if-else's kann ziemlich gut funktionieren, entweder mit String-Vergleichen oder mit regulären Ausdrücken (Letzteres, wenn Sie Vergleiche komplizierter als die Präfix-Übereinstimmungen bisher, die wahrscheinlich einfacher und schneller wäre, I ' Ich erwähne reg-ex nur, weil sie manchmal mit allgemeineren Fällen dieser Art von Muster gut funktionieren.
Wenn Sie sich für if-elnes entscheiden, versuchen Sie zu überlegen, welche Fälle am häufigsten auftreten, und machen Sie diese Tests vor denen für seltenere Fälle (obwohl natürlich "beginnt mit abcd" ist ein Fall zu suchen Sie nach es müsste überprüft werden, bevor "beginnt mit abc").
Sind Ihre Schalter Fällen gehen alle gleich lang sein? z.B. ABC, XYZ – Paddy
@Paddy: Nein, sie können unterschiedliche Länge sein. Danke. – Amra