Объявить 2 типа внутри, используя оператор дает ошибку компиляции? - PullRequest
7 голосов
/ 26 марта 2010

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

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

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

Невозможно использовать более одного типа в для использования, фиксированной или декларации заявление.

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

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

Ответы [ 3 ]

13 голосов
/ 26 марта 2010

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

Редактировать: Чтобы обозначить все слова "Эрик Липперт", в разделе 8.13 спецификации языка сказано:

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

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

в точности соответствует последовательности вложенных операторов:

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

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

11 голосов
/ 26 марта 2010

Сделайте это вместо

using (ADataContext _dc = new ADataContext(ConnectionString))
using (BDataContext _dc2 = new BrDataContext(ConnectionString))
{ // ...}
5 голосов
/ 26 марта 2010

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

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

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) { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...