开发者

Declare 2 types inside using statement gives compile error?

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开发者_Python百科 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?


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.


Do this instead

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


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) { ... }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜