Commutateur de cas: puis-je utiliser une plage au lieu d'un numéro de
Je veux le switch, mais j'ai beaucoup de cas, est-il un raccourci? Jusqu'à présent, la seule solution que je connaisse et essayé est:
switch (number)
{
case 1: something; break;
case 2: other thing; break;
...
case 9: .........; break;
}
Ce que j'espère, je suis capable de faire est quelque chose comme:
switch (number)
{
case (1 to 4): do the same for all of them; break;
case (5 to 9): again, same thing for these numbers; break;
}
- dans quelle langue? (bien que généralement votre réponse est NON)
- Vous pouvez utiliser des if-else pour un tel scénario
Vous devez vous connecter pour publier un commentaire.
Un peu en retard pour le jeu, pour cette question, mais au cours des dernières modifications introduit en C# 7 (Disponible par défaut dans Visual Studio 2017/.NET Framework 4.6.2), basées sur une plage de commutation est désormais possible avec l'
switch
déclaration.Exemple:
Notes:
(
et)
ne sont pas nécessaires dans lewhen
condition, mais sont utilisés dans cet exemple pour mettre en évidence la comparaison(s).var
peut également être utilisé en lieu et place deint
. Par exemple:case var n when n >= 100:
.(
et)
autour de lawhen
condition sont inutiles. I. e.case int n when n >= 100:
fonctionne également.var
fonctionne: I. e.case var n when n >= 100:
.Ici est une meilleure et solution élégante pour votre énoncé du problème.
Maintenant appeler notre conditionnelle switch
Suppléant de Commutateur/ifElse
If-else doit être utilisé dans ce cas, Mais si il ya encore un besoin d'interrupteur pour une raison quelconque, vous pouvez le faire ci-dessous, les premiers cas sans pause va se propager jusqu'à la première pause est rencontré. Comme les réponses précédentes ont suggéré que je recommande si-sinon-dessus de l'interrupteur.
Intervalle est constante:
Autrement:
Vous pourriez avoir
switch
construire la "poignée" va en l'utilisant conjointement avec unList
de vos limites.Avec cette approche, les plages peuvent avoir différentes travées.
Comme mentionné
if-else
serait mieux dans ce cas, où vous aurez la gestion d'une gamme:Je voudrais utiliser ternaire opérateurs pour classer votre commutateur conditions.
Donc...
Dans .Net Visual Basic permet de plages dans les instructions de commutation, mais en C# il n'y a pas de syntaxe valide pour cette.
S'attaquer à votre problème spécifique en C#, je voudrais résoudre ainsi:
Pour illustrer cela, imaginez que vous avez un pourcentage de la valeur.
À l'aide de votre problème en tant que modèle, vous pourriez voulez que cela ressemble à:
Cependant, depuis C# ne permet pas que de la syntaxe, voici une solution qui C# permet:
Il peut prendre un peu de s'habituer, mais c'est bien une fois que vous l'obtenez.
Personnellement, je serais heureux de les instructions switch pour permettre des plages.
L'avenir de C# les instructions switch
Ici sont quelques idées que j'ai eu de la façon dont les instructions switch pourrait être amélioré:
Version Un
Version B
Si vous utilisez C/C++, il n'y a pas de "plage" de la syntaxe. Vous pouvez seulement de la liste de toutes les valeurs après chaque "case" du segment.
Le langage Ada ou Pascal gamme de support de la syntaxe.
Tout d'abord, vous devez spécifier le langage de programmation que vous faites référence.
Deuxièmement,
switch
déclarations sont correctement utilisés pour les jeux fermés d'options concernant la commutation variable, par exemple, des énumérations ou des chaînes prédéfinies. Pour ce cas, je vous recommande d'utiliser le bon vieuxif-else
structure.En C# commutateur cas sont essentiellement des dictionnaires sur ce qu'il faut faire ensuite. Puisque vous ne pouvez pas regarder une série dans un dictionnaire, le meilleur que vous pouvez faire est le cas ... lors de la déclaration de Steve Gomez mentionné.
Pour terminer le thread, voici la syntaxe du C# 8 :
Si vous souhaitez spécifier les plages :
Si la question était sur C (vous n'avez pas dit), alors la réponse est non, mais: GCC et Clang (peut-être d'autres) prennent en charge un syntaxe, mais c'est pas valide ISO C:
Assurez-vous d'avoir un espace avant et après le
...
, sinon vous aurez une erreur de syntaxe.Par
switch
cas, c'est impossible.Vous pouvez aller avec des instructions if imbriquées.(number >= 1 && number <= 4)
au lieu de vérifier chaque numéro? Comment écririez-vous entre 1 et 120? 😉=
vs==
.Vous pouvez utiliser des if-else avec || les opérateurs (ou opérateur) comme:
if (number >= 1 && number <= 4) { … } else if (number >= 5 && number <= 9) { … }
, vous ne pensez pas?