私は本当にその質問を理解していません - あなたは通常どおり例外を投げます。 MyThing
はIDisposable
を実装した場合、:あなたがブロックを残すように例外がスローされますよう
using (MyThing thing = new MyThing())
{
...
throw new ApplicationException("oops");
}
そしてthing.Dispose
は、呼び出されます。
try
{
...
using (MyThing thing = new MyThing())
{
...
}
...
}
catch (Exception e)
{
....
}
finally
{
....
}
(または使用中のtry/catch /最後に置く):
using (MyThing thing = new MyThing())
{
...
try
{
...
}
catch (Exception e)
{
....
}
finally
{
....
}
...
} // thing.Dispose is called now
それとも、/ついにのtry/catchと使用して、あなたのいずれかを行うことができ巣それらを結合する場合using
を展開して、finally
ブロックでDispose
を明示的に呼び出すことができます。finally
(またはcatch
)に必要な余分な例外処理コードまたは-recoveryコードを追加して、@Quarrelsomeが示すようにブロックすることができます。
EDIT:あなたのDispose
メソッドが呼び出されることを確実にすることとは別に、例外を処理する必要がある場合@Toranビラップスに対応して、あなたがusing
とtry/catch/finally
を使用する必要がありますかusing
をアンロールよどちらか - 私は考えていませんあなたが望むものを達成するための他の方法があります。あなたは例外
あなたが使用してブロック内でtry文を使用するかは、tryブロック
で使用してブロックを使用することができますいずれかをキャッチするtry文を持っている必要があります。しかし、あなたが使用する必要が