2010-07-29 4 views
0

Fondamentalement, je quelque chose comme ceci:Comment sortir d'une sous-routine et commencer à la ligne suivante sur la subrutine existante 3 ou 4 subrutines vers le haut?

Form1_btnStart_click (public void)
{
Void1()
nextLine
}

Void1 public void()
{
Void2()
}

Je dois sortir de Void2 o r au-delà et aller à la "NextLine" spot. Autre que de mettre une instruction if après chaque sous-routine pour voir si une certaine valeur est satisfaite et ensuite utiliser "return;", ce qui causerait quelques problèmes puisque c'est un grand programme qui signifie que ce changement ne sera pas nécessairement corrigé bouton qui utilise finalement ce sous-programme Void2() et pourrait même le casser dans de nombreuses circonstances. Des idées?

Répondre

0

Lancez une exception personnalisée et enroulez votre appel sur Void1() dans un bloc try...catch pour l'intercepter.

+0

Cela ne poserait-il pas toujours le même problème si un autre sous-programme l'appelait, provoquant des problèmes? – Bryan

+0

Vous voulez dire que, seulement s'il est appelé de Void1(), vous devez sortir (et pas ailleurs)? Si vous recherchez différentes fonctionnalités à partir d'une seule fonction, en fonction de l'endroit où vous l'appelez, vous devrez penser à «refonte». Les fonctions ne sont pas censées savoir quoi que ce soit au sujet de leurs appelants, en règle générale. Si vous aviez vraiment besoin de le pirater, vous pouvez définir un drapeau avant d'appeler Void1(), et ne lancer l'exception que si ce drapeau est activé. (Effacez ce drapeau au retour de Void1(), bien sûr). – TreDubZedd