Использование «продолжить с меткой» для достижения внутреннего цикла for

while (true) {
    try {
        //create ImportantObject
        LoopToGoTo:
        for (int i = 0; i < Limit; i++) {
            //method in here throws the exception
            //ImportantObject is used in here.
        }
    } catch(Exception e) {
        //report error
        continue LoopToGoTo;
    }
}

Я хотел бы продолжить цикл, который находится внутри блока try catch. Это возможно?

РЕДАКТИРОВАТЬ: Извините, мне было непонятно, почему я не мог переместить try catch внутрь цикла for. (отредактированный фрагмент) Если я помещу try-catch в цикл for, вызовы внутри не смогут получить доступ к ImportantObject. Вот здесь я и застрял.

EDIT2: Хорошо, я решил свою проблему, хотя и без продолжения с ярлыком! Думаю, ответ на мой вопрос будет простым «нет». Плохие привычки могут быть повсюду, но мои задания должны быть сданы через два часа. что я могу сказать :D

//ImportantClass ImportantObject = null;
while (!ranOnce) {
    try {
        //create ImportantObject
        ranOnce = true;
    } catch(Exception e) {
        //report error
        continue;
    }
}
for (int i = 0; i < Limit; i++) {
    try {
        //method in here throws the exception
        //ImportantObject is used in here.
    } catch(Exception e) {
        //report error
        continue;
    }
}

person James    schedule 13.09.2012    source источник
comment
Вам не нужно ничего иметь, и он продолжит цикл for.   -  person Peter Lawrey    schedule 14.09.2012
comment
Если я помещу try-catch в цикл for, вызовы внутри не смогут получить доступ к ImportantObject. Вот где я застрял. - Я не понимаю - создайте ImportantObject, войдите в цикл for, затем войдите в цикл try - это не работает?   -  person matt b    schedule 14.09.2012


Ответы (3)


Нет, это невозможно, так как вы уже находитесь за пределами блока try.

Почему бы просто не переместить try catch внутрь цикла for?

for (int i = 0; i < Limit; i++) {
    try {
        //method in here throws the exception
    } 
    catch(Exception e) {
    //report error
    }
}
person matt b    schedule 13.09.2012
comment
Это в основном то, что я закончил.. - person James; 14.09.2012

Вы имеете в виду, что хотите сделать это?

        for (int i = 0; i < Limit; i++) {
          try {
            //method in here throws the exception
          } catch(Exception e) {
            //report error
          }
        }
person JustinKSU    schedule 13.09.2012

Я думаю, что простой continue; будет иметь тот же эффект, которого вы хотите достичь.

person user1655481    schedule 13.09.2012