views:

102

answers:

3

I want to use this line of code:

using (ADataContext _dc = new ADataContext(ConnectionString), BDataContext _dc2 = new BrDataContext(ConnectionString)){ // ...}

This gives a compile error:

Cannot use more than one type in a for, using, fixed or declartion statement.

I thought this was possible? MSDN says it is: http://msdn.microsoft.com/en-us/library/yh598w02%28VS.80%29.aspx In the MSDN sample code Font is used, which is class and thereby a reference type as well as my two DataContext classes.

What went wrong here? How does my attempt differ from the MSDN sample?

+4  A: 

The using resource acquisition statement can be a declaration. A declaration can only declare variables of one type.

You can do:

using (TypeOne t = something, t2 = somethingElse) { ... }
// Note that no type is specified before `t2`. Just like `int a, b`

but you can't

using (TypeOne t = something, TypeTwo t2 = somethingElse) { ... }
Mehrdad Afshari
+4  A: 

MSDN declared instances of two objects of the same type. You're declaring multiple types, hence the error message you received.

Edit: To go all "Eric Lippert" on it, section 8.13 of the language specification 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

The key is that these are resources of a given type, not types, which matches the MSDN example.

Anthony Pegram
Word. --------------
Eric Lippert
+3  A: 

Do this instead

using (ADataContext _dc = new ADataContext(ConnectionString))
using (BDataContext _dc2 = new BrDataContext(ConnectionString))
{ // ...}
Catalin DICU
with some more braces for readability
Ben Voigt
I'd actually argue that fewer braces equals more readability in this case.
Eric Lippert
I think it's more readable with less braces as well.
George Handlin