2010-03-25 4 views
7

Ich möchte diese Codezeile verwenden:Deklarieren Sie 2 Typen innerhalb der Anweisung verwendet Compile Fehler?

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

Dieses einen Compiler-Fehler gibt:

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

Ich dachte, dies war möglich? MSDN sagt, es ist: http://msdn.microsoft.com/en-us/library/yh598w02%28VS.80%29.aspx In der MSDN-Beispielcode Schriftart wird verwendet, die Klasse und damit ein Referenztyp sowie meine beiden DataContext-Klassen.

Was ist hier schief gelaufen? Wie unterscheidet sich mein Versuch von dem MSDN-Beispiel?

Antwort

13

MSDN Instanzen von zwei Objekten des gleichen Typs erklärt. Sie deklarieren mehrere Typen, daher die Fehlermeldung, die Sie erhalten haben.

Edit: alle „Eric Lippert“ auf sie gehen, Abschnitt 8.13 der Sprachspezifikation sagt:

Wenn eine Ressource-Akquisition die Form eines für lokale Variablen Deklaration erfolgt, ist es möglich, um mehrere Ressourcen eines bestimmten Typs zu erhalten. Eine Verwendung Aussage der Form

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

ist in eine Folge von verschachtelt mit Anweisungen genau äquivalent:

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

Der Schlüssel ist, dass diese Ressourcen eines bestimmten Typs, nicht Typen , die dem MSDN-Beispiel entspricht.

+5

Wort. -------------- –

5

Die Ressourcenerfassungsanweisung using kann eine Deklaration sein. Eine Deklaration kann nur Variablen einen Typ deklarieren.

können Sie tun:

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

aber Sie können nicht

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

Tun Sie dies stattdessen

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

mit ein paar mehr Klammern für die Lesbarkeit –

+7

Ich würde tatsächlich argumentieren, dass weniger geschweifte Klammern in diesem Fall lesbarer ist. –

+0

Ich denke, es ist mit weniger Klammern auch besser lesbar. –

Verwandte Themen