Попробуйте Catch - Наконец, в заявлении If, как продолжить после? - PullRequest
0 голосов
/ 10 апреля 2010

как я могу это сделать?

 void x()
     {....
        if (...)
        {try
            {}
            catch (ComException com)
                { throw com}
            finally  // in any case, executed fine!
                {...instructions.......}

        }
        ... instructions...// not executed in case of exception because the finally can't embrace the following code too... but this block of code needs to be executed in any case too...
        {}


     }

Ответы [ 4 ]

3 голосов
/ 10 апреля 2010

Это неверная логика. Блок else не будет выполнен, если код входит в оператор if.

Если вам действительно нужно выполнить его даже в случае исключения, скопируйте код из блока else в блок finally.

РЕДАКТИРОВАТЬ: Итак, я думаю, что вы хотите это:

try
{
     if()
     {
           try
           {
               //Code
           }
           catch(ComException e)
           {
                throw e;
           }
     }
}
finally
{
    /*....instructions.....*/
}

Причина этого в том, что внутренняя попытка выполнит код, если оператор IF верен, и перехватит, а затем повторно сгенерирует исключение ComException, если оно встретит его. Код в блоке finally будет выполняться независимо от оператора IF или перехвата ComException.

Это лучше объясняет положение?

С извинениями дтб ; он ответил на это первым, я просто добавил объяснение.

2 голосов
/ 10 апреля 2010

Вы ищете это?

try
{
    if (...)
    {
        try
        {
            ...
        }
        catch (ComException)
        {
            ...
        }
    }
}
finally
{
    ...
}

Блок finally выполняется независимо от того, выполняется условие или нет.

1 голос
/ 10 апреля 2010

Переместите код в ветке "else" в отдельный метод. Затем вызовите этот метод как из «else», так и из «finally».

0 голосов
/ 10 апреля 2010

Если что-то нужно выполнить, оно должно войти в блок finally. Наконец, всегда выполняется независимо от того, что происходит в блоках try и catch. Контекст «else» действительно находится за пределами вашего сегмента try / catch / finally.

...