かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

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だろうと、そうじゃなくても動く。

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