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