13
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

usingステートメントにtry~catchを使うときは、usingの外側に書く

Last updated at Posted at 2019-06-09

#はじめに

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);
}

StreamReader Class - Microsoct Docs

13
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?