Можно ли прервать / вернуть выполнение метода из другого метода? - PullRequest
5 голосов
/ 16 сентября 2010

У меня есть что-то вроде этого:

void MethodToBreak()
{
    // do something

    if(something)
    {
        MethodThatBreaks();
        return;
    }

    // do something
}

void MethodThatBreaks()
{
    // do something
}

Итак, мне было интересно: можно ли прервать выполнение из: MethodThatBreaks()? Тогда у меня будет: if(something) MethodThatBreaks();, и если условие внутри if истинно, ничего после этой строки не будет выполнено.

ПРИМЕЧАНИЕ: я знаю, что это возможно с else в этом случае, но я не хочу этого.

Ответы [ 3 ]

4 голосов
/ 16 сентября 2010

Сопровождение было бы кошмаром, если бы вы расстроили выполнение одного метода из другого.Попытка выяснить, почему ваш поток управления повсеместно через шесть месяцев или для другого разработчика, может вызвать аневризму.

Нет ничего плохого в том, что вы уже делаете там, хотялично я бы использовал else.Есть ли конкретная причина, по которой вы не хотите использовать else?Если оставшийся код слишком длинный, возможно, это указывает на необходимость рефакторинга.

0 голосов
/ 09 января 2014

Это может быть сделано: объявить глобальную переменную

 a=null;
void MethodToBreak()
{
    // do something

    if(something)
    {
        MethodThatBreaks();
        if(a==null){

        } else{
        return;
        }
    }

    // do something
}

void MethodThatBreaks()
{
     a="somevalue";
    // do something
}
0 голосов
/ 16 сентября 2010

Бросок исключения в MethodThatBreaks - одна из возможностей. Итак, в клиенте MethodToBreak вы ставите блок try catch.

...