Declare 2 types inside using statement gives compile error?

谁说胖子不能爱 提交于 2019-12-08 17:33:51

问题


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?


回答1:


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.




回答2:


Do this instead

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



回答3:


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


来源:https://stackoverflow.com/questions/2520070/declare-2-types-inside-using-statement-gives-compile-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!