0

どうやってやるの ?

 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

4 に答える 4

3

それは間違った論理です。コードがifステートメントに入った場合、elseブロックは実行されません。

例外が発生した場合でも本当に実行する必要がある場合は、elseブロックからfinallyブロックにコードをコピーします。

編集:だから私はあなたが欲しいものはこれだと思います:

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

この背後にある理由は、IFステートメントがtrueの場合、内部試行がコードを実行し、ComExceptionが発生した場合、それをキャッチして再スローするためです。finallyブロックのコードは、IFステートメントまたはComExceptionのキャッチに関係なく実行されます。

これは位置をよりよく説明しますか?

dtbに謝罪します; 彼は最初にこれに答えました、私はちょうど説明を追加しました。

于 2010-04-09T20:57:40.213 に答える
2

「else」ブランチのコードを別のメソッドに移動します。次に、「else」と「finally」の両方からそのメソッドを呼び出します。

于 2010-04-09T20:57:47.627 に答える
2

これをお探しですか?

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

条件が成立するかどうかに関係なく、finallyブロックが実行されます。

于 2010-04-09T20:59:37.143 に答える
0

何かを実行する必要がある場合は、finallyブロックに入れる必要があります。最後に、tryブロックとcatchブロックで何が起こっても、常に実行されます。「else」のコンテキストは、実際にはtry / catch/finallyセグメントの外にあります。

于 2010-04-09T20:57:56.693 に答える