2016-05-27 9 views
-1

Я хочу показать сообщение «Успешно сохраненное», а затем продолжить выполнение следующего блока try-catch. Я попытался «наконец», но он говорит, что «элемент управления не может покинуть тело окончательного блока». Следующий мой код.продолжить выполнение после try catch block

try 
{ 
    //some code 

    return ok(new{Message="Successfully saved"}); 

    try 
    { 
     //some code 
     //return ok(new{Message="Successfully created site"}); 
    } 
    catch(Exception ex) 
    { 
     //return ok(new {Message="failed to create site"}); 
    } 
} 
catch(Exception ex) 
{ 
//return ok(new {Message="failed to save"}); 
} 

Может ли кто-нибудь мне помочь?

+6

Похоже, ваша проблема не связана с блоками try-catch, но вы хотите вернуться из метода, а затем снова войти в нее. –

+1

Можете ли вы показать код так, как хотите? В вашем примере нет блока 'finally', поэтому на 100% уверен, что проблема. – Sean

ответ

1

Почему бы не сохранить результат в переменной в первую очередь?

private WhatEverType MyMethod() 
{ 
    WhatEverType result = default(WhatEverType); 
    try 
    { 
     //some code 

     result = ok(new{Message="Successfully saved"}); 

     try 
     { 
      //some code 
      result = ok(new{Message="Successfully created site"}); 
     } 
     catch(Exception ex) 
     { 
      result = ok(new {Message="failed to create site"}); 
     } 
    } 
    catch(Exception ex) 
    { 
     result = ok(new {Message="failed to save"}); 
    } 
    return result; 
} 
+0

Я предпочел бы «возвращаться» в блоки 'catch': если что-то не получилось *, не нужно продолжать выполнение –

+0

Зачем ловить исключение в этом методе? если вы вернетесь немедленно? –

0

Вы возвращаетесь с первого блока try, чтобы ваш код не выполнялся дальше других блоков try-catch. Я бы рекомендовал хранить/добавлять значения возвращаемого сообщения в строке (вместо того, чтобы возвращаться туда сам) и, наконец, отобразить, что было успешным (или ошибками) в конце в блоке finally.

0
public return-type method() 
{ 
    var-type varResult; 
    var-type varResult1; 

    try 
    { 
     // code 
     varResult = successfully saved 

     try 
     { 
      //code 
      varResult = unsuccessfully saved 
     } 
     catch(Exception ex) 
     { 
      varResult = successfully saved 
     } 
    } 
    catch(Exception ex) 
    { 
     result = varResult = unsuccessfully saved 
    } 
    finally 
    { 
     varResult1 = success 
    } 

    return varResult1 
} 

Здесь varResult возвращают по потоку кода он в зависимости кода, входящего в Ьгу или поймать блок

Но varResult1 возвращение успех независимо код входа в Ьгу или поймать блок

0

Почему не return, но в самого конца:

try 
{ 
    //some code 

    //DONE: no return here - we're not ready to return, but want to continue 

    try 
    { 
     // some code 
     //DONE: no return here - we're not ready to return, but want to continue 
    } 
    catch (Exception ex) //TODO: do not catch Exception, but more specific exception 
    { 
     return ok(new {Message="failed to create site"}); 
    } 
} 
catch (Exception ex) //TODO: do not catch Exception, but more specific exception 
{ 
    return ok(new {Message="failed to save"}); 
} 

// but here 
return ok(new{Message="Successfully saved;Successfully created site"}); 
0

Ответный утверждение, что Мессинг вас вверх. Он выведет вас из функции, которую вы выполняете, и, вернитесь. Предложение finally всегда будет выполняться после блока try-catch (обычно используется для очистки), но поскольку у вас есть возврат в вашей попытке, вы никогда не сможете выйти из этого предложения в своем исполнении. Вы можете использовать один try-catch, а затем просто генерировать сообщение на основе исключения, которое было обнаружено в блоке catch. Для вашего сообщения это не очень необходимо, потому что блок catch вы скажете вам, где вы поступили неправильно, в зависимости от исключения и достижения возврата скажут вам, что все пошло правильно.