Can "using" with more than one resource cause a resource leak?

c#, using, using-statement

Solution

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 form

using (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

Problem

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. - Is this true? (font4 won't be disposed of) - Does this mean `using(... , ...)` should be avoided altogether in favor of nested using?

Original source