Объявить 2 типа внутри оператора using, дает ошибку при компиляции?

Я хочу использовать эту строку кода:

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

Это дает ошибку при компиляции:

нельзя использовать более одного типа в for, using, fixed или declartion заявление.

Я думал, что это возможно? MSDN говорит, что это:http://msdn.microsoft.com/en-us/library/yh598w02%28VS.80%29.aspx В примере кода MSDN используется шрифт, который является классом и, следовательно, ссылочным типом, а также двумя моими DataContext занятия.

что здесь пошло не так? Чем моя попытка отличается от образца MSDN?

3 ответов


MSDN объявила экземпляры двух объектов одного типа. Вы объявляете несколько типов, следовательно, сообщение об ошибке, которое вы получили.

Edit: чтобы пойти все "Эрик Липперт" на нем, раздел 8.13 спецификации языка говорит:

когда приобретение ресурса принимает форму объявления локальной переменной, можно получить несколько ресурсов данного типа. Оператор using формы

using (ResourceType r1 = e1, r2 = e2, ..., rN = eN) statement

is точно эквивалентно последовательности вложенных операторов using:

using (ResourceType r1 = e1)
    using (ResourceType r2 = e2)
        ...
            using (ResourceType rN = eN)
                statement

что это ресурсы данного типа, не типы, которые соответствуют примеру MSDN.


сделать это вместо

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

на using оператор приобретения ресурсов может быть объявлением. Объявление может объявлять только переменные один тип.

вы можете сделать:

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

но вы не можете

using (TypeOne t = something, TypeTwo t2 = somethingElse) { ... }