У меня есть несколько методов, которые вызываются из нескольких других методов. Когда в каком-то из методов выполняется определенное действие, хочется вернуться к самому первому методу и пропустить остальной код. На данный момент я использую booleans
для проверки «статуса» программы, но я хотел бы избежать этого, потому что методы должны быть void
, так как по сути они не должны ничего возвращать. Я нашел что-то вроде goto
, но это работает только в том же методе.
Вопрос: есть ли способ перейти к определенной точке кода другим методом в C#? Я нашел материал на других языках, но не так много на С#.
Текущая ситуация:
void test1()
{
bool status = test2();
if (!status)
return; // the other stuff will not get done
Debug.WriteLine("Initialization OK");
}
bool test2()
{
bool status = test3();
if (!status)
return false; // the other stuff will not get done
// do other stuff
return true;
}
bool test3()
{
if (xxx)
return false; // the other stuff will not get done
else
// do other stuff
return true;
}
Разыскиваемая ситуация:
void test1()
{
test2();
// do other stuff
Debug.WriteLine("Initialization OK");
GOTOHERE:
Debug.WriteLine("Initialization NOT OK");
}
void test2()
{
test3();
// do other stuff
}
void test3()
{
if (xxx)
**GOTOHERE**; // Go directly to the location in test1() so that all unnecessary code is skipped
// do other stuff
}
test2
илиtest3
, и используйте это значение, чтобы указать, хотите ли вы продолжить. - person HimBromBeere   schedule 09.08.2017throw
исключение и перехватить его вtest1()
. - person C.Evenhuis   schedule 09.08.2017goto
почти всегда является плохой практикой и может быть заменено альтернативными и дружественными подходами. некоторые дополнительные чтения: stackoverflow.com/questions/11906056/goto-is-this-bad и drdobbs.com/jvm/programming-with- причина-почему-это-плохо/ - person mcy   schedule 09.08.2017test2()
мог восстановиться после ошибки, которая произошла вtest3()
. Я не знаю, какая ошибка возникает здесь, поэтому я не могу сказать, будет ли это хорошей идеей или нет. Но я согласен с тем, что исключения не должны использоваться как странная заменаgoto
. - person C.Evenhuis   schedule 09.08.2017