かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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

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