using
C# のキーワードに関する多くのスレッドを読みましたが、同じ質問を持つ人を見つけることができませんでした。この興味深い記事を読むと、using ステートメントは基本的に try/catch ブロックと同等であることがわかります。
MyResource myRes= new MyResource();
try
{
myRes.DoSomething();
}
finally
{
// Check for a null resource.
if (myRes!= null)
// Call the object's Dispose method.
((IDisposable)myRes).Dispose();
}
本当に私を怒らせるのは、オブジェクトの初期化myRes= new MyResource()
がまだ try/catch ブロックの外にあるということです。そのため、初期化中に何か問題が発生した場合 (ああ、そうです!) 通常の try を使用する以外にそれを処理する方法はありません。 /キャッチブロック。
これは正しいですか、何か不足していますか? 私の意見では、これはusing
ステートメントの意味を部分的に役に立たなくします。
私も次のようなことを試しました:
using (MyResource myRes)
{
myRes = new MyResource();
myRes.DoSomething();
}
しかし、コンパイラはこれを好まないため、初期化を try ブロック内に持ち込むことはできません。
これは私にはとても奇妙に思えるので、何かが欠けているに違いないと思います。この背後にある理由を誰か説明してもらえますか?