Дайте мне посмотреть, понимаю ли я вопрос:
У вас есть функция Foo()
, которая вызывает функцию Bar()
. (Я хотел удалить рекурсию, которая была в вашем примере для простоты, пожалуйста, исправьте меня, если это было важно.) Когда функция Bar()
возвращается, вы хотите, чтобы управление передавалось не обратно Foo()
, а вызывающему Foo? *
Это возможно в языках более низкого уровня, таких как C, взломав стек и не поместив туда обратный адрес Foo()
, так что когда Bar()
попытается вернуться, он перейдет к вызывающей стороне Foo.
Однако в C # нет. Стек вызовов является стеком, и управление будет возвращаться по порядку. Единственное, что вы можете сделать, - это ставить оператор return
после каждого вызова Bar()
.
Edit:
"рекурсивные вызовы без их рекурсивности"
Как насчет этого:
bool doItAgain = true;
while(doItAgain)
{
doItAgain = false;
// process, with your switch statement or whatever.
if(...)
{
doItAgain = true;
continue; // if necessary, skip any code after this statement. May not be necessary if you have things set up right.
}
}