RAII なクラス

あると便利なこともあるので作ってみた。

public class Raii : IDisposable
{
    Action action;
    public Raii(Action action) { this.action = action; }
    public void Dispose() { action(); }
}
Form form;

form.SuspendLayout();
using (Raii r = new Raii(() => { form.ResumeLayout(); })
{
    ...
}
Graphics g;

var old = g.InterpolationMode;
using (Raii r = new Raii(() => { g.InterpolationMode = old; })
{
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
    ...
}

これぐらいなら .NET Framework の中にありそうな気もするけど……。



でもリソースじゃないので RAII と書くのはおかしい気がする。AdhocDisposable とか?