2010-03-25 55 views
7

我想用這行代碼:聲明內部使用語句的2種類型給出編譯錯誤?

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

這給出了一個編譯錯誤:

Cannot use more than one type in a for, using, fixed or declartion statement.

我認爲這是可能的嗎? MSDN表示它是:http://msdn.microsoft.com/en-us/library/yh598w02%28VS.80%29.aspx 在MSDN示例代碼中使用了字體,這是類,因此也是一個引用類型以及我的兩個DataContext類。

這裏出了什麼問題?我的嘗試與MSDN示例有什麼不同?

回答

13

MSDN聲明的兩個同類型的對象的實例。您聲明瞭多種類型,因此收到了錯誤消息。

編輯:讓所有「埃裏克利珀」就可以了,語言規範的第8.13節說:

當資源採集需要一個局部變量聲明的形式,也可以獲取給定類型的多個資源。形式

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

的using語句完全等效於using語句嵌套的序列:

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

最關鍵的是,這些都是資源給定類型,而不是類型,它與MSDN示例相匹配。

+5

字。 -------------- – 2010-03-25 23:43:14

5

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

做到這一點,而不是

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

有一些更多的可讀性大括號 – 2010-03-25 23:35:40

+7

我實際上認爲在這種情況下大括號等於更多的可讀性。 – 2010-03-25 23:43:50

+0

我認爲它的可讀性更好,支架也更少。 – 2010-03-26 00:59:33