Si vous saviez que la durée des conditions dans lesquelles vous se soucierait seraient tous de la même longueur, vous pouvez:
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;
}
Le Math.Min(3, mystring.Length)
est là pour qu'une chaîne de moins de 3 caractères ne jeter une exception sur l'opération de sous-chaîne.
Il existe des extensions de cette technique pour correspondre, par ex. un tas de chaînes à 2 caractères et un tas de chaînes à 3 caractères, où certaines comparaisons à 2 caractères sont suivies de comparaisons à 3 caractères. Cependant, à moins d'avoir un très grand nombre de chaînes de ce type, il devient rapidement moins efficace que le chaînage if-else simple pour le code courant et la personne qui doit le maintenir.
Modifier: Ajouté depuis que vous avez maintenant déclaré qu'ils seront de différentes longueurs. Vous pourriez faire le modèle que j'ai mentionné de vérifier les premiers caractères X et ensuite les caractères Y suivants et ainsi de suite, mais à moins qu'il y ait un motif où la plupart des cordes sont de la même longueur, cela sera à la fois inefficace et horrible. de pessimisation prématurée). Le motif de commande est mentionné dans une autre réponse, donc je ne donnerai pas de détails à ce sujet, comme c'est le cas lorsque vous mappez des motifs de chaîne à des ID, mais ils sont en option. Je ne changerais pas de chaînes if-else pour commander ou mapper des modèles pour gagner l'efficacité parfois a sur if-else, comme vous perdez plus dans les comparaisons pour la commande ou l'obtention du modèle ID. Je ferais bien de le faire si cela rendait le code plus clair.
Une chaîne d'if-else peut très bien fonctionner, soit avec des comparaisons de chaînes, soit avec des expressions régulières (cette dernière si vous avez des comparaisons plus compliquées que les préfixes-match, ce qui serait probablement plus simple et plus rapide je mentionne reg-ex juste parce qu'ils fonctionnent parfois bien avec des cas plus généraux de ce type de pattern).Si vous optez pour if-elses, essayez de savoir quels cas vont se produire le plus souvent, et faites ces tests avant ceux pour les cas moins fréquents (bien sûr, si "commence par abcd" est un cas à chercher, il faudrait vérifier avant "commence par abc").
sont vos cas de commutation tout va être la même longueur? par exemple. ABC, XYZ – Paddy
@Paddy: Non, ils peuvent être de longueur différente.Merci. – Amra