I'm not convinced by the utility of your example. What's wrong with:
foreach (var obj in objects) {
AddButton("Delete " + obj.ToString(), obj.Delete);
}
This is even simpler and doesn't use closures at all.Doh!
It would have made more sense if I had some other piece of information to inject in, like if you had a database reference that needed to be passed in to the Delete() method.
Then:
AddButton("Delete " + obj.ToString(), () => obj.Delete(db));
Vs. var d = new DeleteHandler(obj, db);
AddButton("Delete " + obj.ToString(), d.DoDelete);
EDIT: fixedYup, makes more sense now! This is a good example, I think, to give to people who are used to objects being used for everything. Nice, clean, functional syntax.
(And of course you mean "d.DoDelete")
With Closure:
Without closure: