Instruction Switch en C#
Personne ne sait si il est possible d'inclure une plage dans une instruction switch (et si oui, comment)?
Par exemple:
switch (x)
{
case 1:
//do something
break;
case 2..8:
//do something else
break;
default:
break;
}
Le compilateur ne semble pas aimer ce genre de syntaxe ni aime-t-il:
case <= 8:
OriginalL'auteur pm_2 | 2010-03-31
Vous devez vous connecter pour publier un commentaire.
Non, ce n'est pas possible. Il existe quelques façons que j'ai fait dans le passé:
Fixe codage:
En combinaison avec un
if {}
déclaration:Le premier exemple semble étrange: je sais que c'est vrai pour, par exemple, Java, mais le MSDN entrée pour
switch
stipule explicitement que le compilateur ne permettra pas de “fall-through”. Ou ai-je raté quelque chose ici?Bon, apparemment, c'est autorisé pour les "vides"
case
s.OriginalL'auteur Andy Shellam
Non, mais vous pouvez écrire, si vous avez au moins éviter d'écrire le
//do something else
partie plusieurs fois.OriginalL'auteur Marcelo Cantos
Réponse courte : pas. Il serait possible d'écrire tous les cas, là, mais une telle gamme de notation n'est pas pris en charge.
Je pense que vous devez utiliser
if
déclaration ici ou de passer à une langue où il y a un meilleur support pour les cas descrimination.OriginalL'auteur Tomas Vana
Si vous avez si peu de cas,
if
serait bien préférable.OriginalL'auteur leppie
Une possibilité est de convertir vos gammes en nombres entiers. Par exemple:
OriginalL'auteur Peter Baum
Vous pouvez, gérer le cas explicites au cas par cas, et si vous avez seulement une gamme, de traiter avec elle, dans le cas par défaut.
OriginalL'auteur Samuel De Rycke
Alors que ce n'était pas possible quand j'ai d'abord posé cette question, par le miracle de C# Pattern Matching, c'est maintenant (en C# 7):
Un billet de blog sur le sujet
OriginalL'auteur pm_2
vous pouvez faire
OriginalL'auteur munissor
Vous pouvez utiliser cas de chute par:
Mais j'avais juste l'utiliser pour cela.
OriginalL'auteur reko_t
Vous ne pouvez utiliser aucune des instructions conditionnelles dans un commutateur cas.
Si vous voulez exécuter les mêmes lignes de code pour les différentes options que vous pouvez faire qu'une chose:
OriginalL'auteur Hiscal