かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

GenericなメソッドやクラスではIDisposableなクラスのサポートを忘れないようにしよう

タイトルの通りのMore Effective C#の一節を見て、おぉ綺麗に忘れてたと思った。現実的じゃないけど以下のようなメソッドとかで

void DoSomething<T>(Func<T> factory, Action<T> doIt)
{
  var val = factory();
  doIt(val);
}

TがIDisposableを実装してたらリソースリークしてしまう。どうするかというと

void DoSomething<T>(Func<T> factory, Action<T> doIt)
{
  var val = factory();
  // この部分ね
  using(var d = val as IDisposable)
  {
    doIt(val);
  }
}

とすればいい。これでTがIDisposableだろうと、そうじゃなくても動く。

なるほど、と関心したのでメモメモ。