usingusing, in the sense of
using (var foo = new Bar()) { Baz(); } Is actually shorthand for a try/finally block. It is equivalent to the code:
var foo = new Bar(); try { Baz(); } finally { foo.Dispose(); } You'll note, of course, that the first snippet is much more concise than the second and also that there are many kinds of things that you might want to do as cleanup even if an exception is thrown. Because of this, we've come up with a class that we call ScopeScope that allows you to execute arbitrary code in the Dispose method. So, for example, if you had a property called IsWorking that you always wanted to set to false after trying to perform an operation, you'd do it like this:
using (new Scope(() => IsWorking = false)) { IsWorking = true; MundaneYetDangerousWork(); } You can read more about our solution and how we derived it here.