#はじめに
usingステートメントについて、外側にtry~catch
を使っている場合と、中側に使っている場合、2種類のサンプルを見かけるのですが、どちらの書き方にした方がいいのか、社内でフィードバックをもらったのでまとめました。
usingステートメントとは
- ファイルの読み込み時など、外部のリソースからデータを取得するような場合、リソースがロックされる
- リソースを確実に解放するためには、
Dispose()
を呼び出す必要があり、通常はtry~finally
を使って自前で書かなくてはならない - usingステートメントを使うことで、例外が発生したときも自動で
Dispose()
が呼び出され、リソースの解放ができる
using ステートメント - Microsoct Docs
try~catchを使うときは外側に書く
usingステートメントに対して、try~catchを使う場合、usingの外側に記述します。
これにより、try~catchの処理を待たずにDisposeを行うことができるため、最速でリソースを解放することができます。
try
{
using (StreamReader sr = new StreamReader("TestFile.txt"))
{
string line;
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
catch (Exception e)
{
Console.WriteLine("The file could not be read:");
Console.WriteLine(e.Message);
}