问题
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