タイトルの通りの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だろうと、そうじゃなくても動く。
なるほど、と関心したのでメモメモ。