According to the last sentence on this MSDN page use
is to be preferred over using
. I've heard it elsewhere (this answer, for example). Why is this? I realize use
was added later. But what's the difference? On the surface, using
seems more useful because you can control when Dispose()
is called, and you can explicitly ignore the bound value (e.g., (fun _ -> ...)
) if needed.
I think that the reason for preferring use
is just that the syntax is simpler. Many other language constructs could be expressed as functions (e.g. try .. with
, for
, while
, ...). If the language designers added a simpler syntax, why not use it...
As I wrote in the earlier answer you referenced, you can precisely control the scope even when using use
. (And this way, you can use it even in constructors of object expressions class declarations.) But most of the time, the automatic behavior is just fine (which makes the construct simpler than using
in C#).
Whether you'll use use
or using
in situations where you need to control the scope explicitly is a matter of personal taste. If you don't like the explicit scoping of use
(which looks a bit weird, I admit, but works fine for me), you can use using
.
EDIT: In a class declaration, you cannot for example write:
type Foo() =
use a = new Whatever()
// ...
because the scope of a
would be (possibly) the whole lifetime of the instance. (Although I think this could be useful and it could add automatic implementation of IDisposable
to your type). If you use using
, you don't get this sort of trouble.