Sûrement Le compilateur sait que c'est la dernière étiquette de l'instruction code> code>? p>
9 Réponses :
dans C # Switch Switchs Vous devez indiquez explicitement pour casser ou goto un autre cas ou goto défaut. p>
en C et C ++, les déclarations de commutation sont tombées à travers des étiquettes sans pause. Avoir l'utilisateur dit explicitement ce qu'ils veulent faire est important dans C # pour éviter les insectes. Beaucoup d'utilisateurs viennent à C # à partir de C ++ par exemple. P>
À propos de la dernière déclaration de cas en particulier que vous demandez. Je peux penser à 3 bonnes raisons. P>
C'est une question C #. Mais peu importe, pourquoi le compilateur doit-il avoir besoin de casser après le dernier label?
Cela n'en a pas besoin, mais la langue l'exige.
C'est parce que dans C ++, c'est ce qui se passe: si Maintenant, comme pour la raison pour laquelle vous avez besoin de la pause code> sur le bloc dernier em>, c'est une simple question de cohérence. Cela facilite également la factivité: Si vous déplacez les cas autour des cas, vous ne vous retrouvez pas soudainement avec des erreurs à cause d'une déclaration manquante code> Déclaration code>. En outre, que se passe-t-il lorsque vous souhaitez ajouter une autre étiquette, etc, etc. p> p> a code> est 1, puis - selon les règles C ++ - les deux "Faire des choses" et em> "faire d'autres choses" se produirait. Pour que les programmeurs C ++ venant à C # ne soient pas trébuchés (et de rendre le code plus clairement tout «rond), C # exige que vous spécifiez explicitement si vous souhaitez que vous souhaitez
casser code> ou tomber sur une étiquette différente. < / p>
Je parle d'après le dernier label. Il n'y a plus d'étiquettes à éviter, il n'y a donc pas besoin de la déclaration de pause.
Cohérence. Même raison que pouvoir avoir une virgule après la dernière définition de l'énumération ou la dernière affectation dans une déclaration d'instanciation d'objet avec des accolades. Et le dernier cas pourrait ne pas toujours être le dernier cas. P>
Cela le rend également donc il y a moins de cas spéciaux. p>
Et si tel est le cas, il est plus facile d'apprendre, d'écrire ou de lire. Bien que cela ajoute à la cohérence. P>
Avoir une pause après la déclaration de cas de votre commutateur est bonne Programmation défensive . Si, peut-être à l'avenir, une autre déclaration de cas est ajoutée ci-dessous, elle supprime le risque du flux du programme tomber de em> de l'affaire ci-dessus. P>
MS dit que la valeur par défaut est toujours évaluée: "Le cas par défaut peut apparaître dans n'importe quel ordre dans la déclaration de commutation. Quelle que soit sa commande dans le code source, elle est toujours évaluée en dernier lieu, après que toutes les étiquettes de cas a été évaluée." Donc, votre raisonnement n'est pas correct.
Lorsque vous utilisez un commutateur code> code>, sur Vous devez choisir ce que vous avez l'intention de faire. Il garantit que le compilateur fait la bonne chose, rend votre code plus clairement et rend plus difficile de faire des choses à programmer stupides, comme ajouter un autre cas après le "dernier" et oublie de mettre une pause / goto / retour. p> break code> n'est pas la seule option. Vous avez également la possibilité d'aller dans un autre cas, allant à l'affaire par défaut, allant à une autre étiquette ou revenant. Il est également possible d'avoir plusieurs cas qui ont un seul organe de mise en œuvre. Comme il y a jusqu'à cinq options, plus la capacité d'avoir plusieurs cas pour une implémentation, le compilateur n'est pas capable de simplement mettre la réponse "correcte". p>
Selon http://msdn.microsoft.com/en-us /Library/06tc147t.aspx p>
Vous ne pouvez pas "tomber" toute section de commutation, y compris la dernière. p> blockQuote>
L'automne peut être évitée par l'une des opérations suivantes: Pause, goto ou retour. P>
MDR. Je faisais juste référence à ce que dit le site Web, pas ce qui est intelligent.
En fait Considérez ce code: P> case 4:
while (true)
Console.WriteLine("Endless looping. . . .");
"Cela explique pourquoi la valeur par défaut n'a pas besoin d'une pause. En fait, toute étiquette inaccessible n'a pas besoin de pause ni de retour ni de retour", mais cela n'explique pas, pourquoi nous avons besoin d'une pause sur codable i> code . Poste cool quand même.
selon Ce message de blog par ERIC LIPPERT (CAS 2), il vous permet de pouvoir rétroverser arbitrairement vos sections de commutateur sans introduire accidentellement un changement de rupture: p>
It [le compilateur] exige que chaque section de commutation, y compris le dernier, avoir un point final inaccessible. Le but de cette règle et de la non-retombée règle en général, est que nous voulons que vous être capable de ré-commander arbitrairement vos sections de commutation sans introduisant accidentellement une rupture changer. p> blockQuote>
Comme mentionné, vous pouvez utiliser la valeur par défaut :, mais considérez la case null aussi. Case NULL: A besoin d'une pause;
cas null: IEVALUATEDTONOTHING (); pause; p>
Si vous voulez "cascade", vous pouvez faire quelque chose comme ça; p> Vous pouvez l'utiliser avec des pauses au besoin, mais une est requis sur la dernière évaluation. P> p>
C'est pour vous aider le programmeur, pas le compilateur. Et si vous ajoutez une autre déclaration après cela et oubliez la pause?
@Byron: Ce serait une erreur de compilation dans C #, non? Donc, vous remarqueriez.
@Thilo - juste parce que c'est une erreur de compilation ne signifie pas que le compilateur a besoin de celui-ci. Les erreurs de temps de compilation sont beaucoup plus faciles et moins chères à corriger que les heures d'exécution. C'est pourquoi Microsoft a inclus cela dans la spécification de la langue. Voir C / C ++.
@Byron: C'est ce que je voulais dire. L'erreur de compilation et l'obligation d'avoir la pause sont là pour aider le programmateur (par opposition à C / C ++ où l'erreur que vous avez mentionnée peut facilement se produire). Je pense que nous sommes sur la même page. (+1 pour les concepteurs de langue C # pour cela, je souhaite que les gars Java avaient eu la même idée. C'est un bon cas pour briser la compatibilité en arrière avec la syntaxe C)
Dupliqué possible de commutation: avez-vous besoin de la dernière pause ? (JavaScript principalement)