C# lets me do the following (example from MSDN):
using (Font font3 = new Font("Arial", 10.0f),
font4 = new Font("Arial", 10.0f))
{
// Use font3 and font4.
}
What happens if font4 = new Font
throws? From what I understand font3 will leak resources and won't be disposed of.
using(... , ...)
should be avoided altogether in favor of nested using?No.
The compiler will generate a separate finally
block for each variable.
The spec (§8.13) says:
When a resource-acquisition takes the form of a local-variable-declaration, it is possible to acquire multiple resources of a given type. A
using
statement of the formusing (ResourceType r1 = e1, r2 = e2, ..., rN = eN) statement
is precisely equivalent to a sequence of nested using statements:
using (ResourceType r1 = e1) using (ResourceType r2 = e2) ... using (ResourceType rN = eN) statement