2013-07-19 14 views
7

Die assignment operator in C# gibt den zugewiesenen Wert zurück. Es ist nicht klar, wo/wie diese Funktion hilfreich sein kann. Mit ihm in einer seltsamen Syntax wie diese können Sie eine einzige Zeile Code speichern, sondern etwas Gutes zu readbility nicht tun:Warum gibt der Zuweisungsoperator den zugewiesenen Wert in C# zurück?

private String value; 
    public void SetAndPrintValue(String value) 
     PrintValue(this.value = value); 
    } 
    private static void PrintValue(String value) { 
     /* blah */ 
    } 

Was dann ihr Zweck ist es?

+1

Dies ist nicht nur eine C# -Syntaxqualität. Es ist manchmal nützlich, wenn Sie zum Beispiel Aussagen treffen, die Ihnen erlauben, gleichzeitig zuzuweisen und zu testen. Es macht jedoch mehr verschleierten Code, so dass es nicht viel Verwendung sieht. Zusammenfassung: Aufgabe ist Ausdruck, keine Aussage! –

+5

Ein anderer guter ist faul Instanziierung, wie in '_myInstance ?? (_myInstance = new MyObject()) ' – McGarnagle

+5

btn1.Visible = btn2.Visible = false; – EricLaw

Antwort

12

Chained assignment ist eine Klammer vieler Sprachen, die auf C (und wahrscheinlich früher) zurückgehen. C# unterstützt es, weil es ein gemeinsames Merkmal solcher Sprachen ist und hat einige begrenzte Verwendung — wie die goto Anweisung.

Gelegentlich könnten Sie Code wie folgt sehen:

int a, b, c; 
for(a = b = c = 100; a <= b; c--) 
{ 
    // some weird for-loop here 
} 

Oder diese:

var node = leaf; 
while(null != node = node.parent) 
    node.DoStuff(); 

Dies könnte einige Code ein wenig kompakter machen, oder können Sie einige clevere Tricks zu tun, aber es macht es sicherlich nicht lesbarer. Ich würde es in den meisten Fällen dagegen empfehlen.

+2

Ich benutze sie sehr häufig Ich habe immer mit vielen der IO-Klassen arbeiten, um das Ergebnis einer Leseoperation zu überprüfen 'while ((currentLine = streamReader.ReadLine())! = Null) {...}' –

+0

@ScottChamberlain Ja, das ist auch ein gutes Beispiel. –

4

Ich verwende es im Allgemeinen für die Zuordnung der gleichen Eigenschaften zu einem Steuerelement.

btnSubmit.Enabled = btnAdd.Enabled = btnCancel.Enabled = txtID.Enabled= false; 
Verwandte Themen