2017-03-01 4 views
4

Ich habe ein Szenario, wo ich zwei neue Objekte habe, in denen nur eins gemäß der Bedingung initialisiert werden muss.Gibt es eine bessere Möglichkeit, eine else-Anweisung zu verwenden, während eine "using" -Blockanweisung verwendet wird?

Aber ich verwende die "using" -Blockanweisung zum Initialisieren eines neuen Objekts.

Wie kann ich es erreichen? Bitte beachten Sie das folgende Szenario.

Gibt es einen besseren Weg, dies in Einzelzustand oder auf andere Weise zu erreichen, um den Code zu reduzieren? weil ich die gleiche Methode in beiden Bedingungen anrufe.

Vielen Dank im Voraus.

Grüße, Anish

+0

was ist Ihr 'wenn condition'? –

+0

Sie können 'using (MyClass c1 = neue MyClass (Bedingung? A: b))'. –

+0

@ AlessandroD'Andria 'a' und' b' sind unterschiedliche Typen, so dass der ternäre Operator nicht direkt gegen diese kompiliert werden kann. –

Antwort

6

Sie können Conditional (Ternary) Operator verwenden.

int a; 
string b; 

using(MyClass c1 = (some condition) ? new MyClass(a) : new MyClass(b)) 
{ 
    SomeMethod(); 
} 
+2

Es wird ein bedingter ternärer Operator genannt: https://msdn.microsoft.com/en-us/library/zakwfxx4(v=vs.100).aspx – john

+1

+1, da er der einzige ist, der 'a' und' erkennt b 'sind verschiedene Typen und können daher den ternären Operator nicht alleine erfüllen. –

+2

@john - nein, es heißt der bedingte Operator. * Einige * Leute wählen, es ternär zu nennen, weil * die meisten * Sprachen nur einen ternären Operator enthalten und es der bedingte Operator ist. –

2

Wie wäre:

using (var c1 = condition ? new MyClass(a) : new MyClass(b)) 
{ 
    SomeMethod(); 
} 
2

Gibt es einen besseren Weg, dies in einzelnen Zustand oder jede andere Art und Weise zu erreichen, um den Code zu reduzieren?

Ja, Sie können.

using (MyClass c1 = condition ? new MyClass(a) : new MyClass(b)) 
{ 
    SomeMethod(); 
} 

?: ist ein Ternary Operator, der, wie der Name, auf 3 Operanden arbeitet vermuten lässt.

1
IDisposable target = somecondition ? new MyClass(a) : new MyClass(b) ; 
    using (IDisposable c1 = target) 
    { 
       SomeMethod(); 
    } 
+0

a und b sind von unterschiedlicher Art. – Vijay

Verwandte Themen