2013-07-19 13 views
7

Wartość assignment operator w C# zwraca przypisaną wartość. Nie jest jasne, gdzie/jak ta funkcja może być pomocna. Używanie go w dziwnej składni jak to można zaoszczędzić linii kodu, ale nie zrobi nic dobrego do readbility:Dlaczego operator przypisania zwraca przypisaną wartość w języku C#?

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

Jaki jest jej cel wtedy?

+1

To nie jest tylko jakość składni C#. Czasami jest przydatny w powiedzeniach, które pozwalają na jednoczesne przypisywanie i testowanie. Ma jednak bardziej zaciemniony kod, więc nie widzi dużego wykorzystania. Podsumowanie: cesja jest wyrażeniem, a nie stwierdzeniem! –

+5

Kolejny dobry to leniwe tworzenie, jak w '_myInstance ?? (_myInstance = new MyObject()) ' – McGarnagle

+5

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

Odpowiedz

12

Chained assignment to podstawa wielu języków wracających do C (i prawdopodobnie wcześniej). C# obsługuje tę funkcję, ponieważ jest to typowa cecha takich języków i ma pewną wartość ograniczoną używać — podobnie jak instrukcja goto.

Czasami można zobaczyć kod tak:

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

albo to:

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

Może to uczynić jakiś kod trochę bardziej zwarty, lub pozwalają zrobić kilka sprytnych sztuczek, ale z pewnością nie czyni go bardziej czytelnym. W większości przypadków zalecałbym odradzanie tego.

+2

Bardzo często używam ich w każdej chwili, gdy pracuję z wieloma klasami IO, aby sprawdzić wynik operacji odczytu 'while ((currentLine = streamReader.ReadLine())! = Null) {...}' –

+0

@ScottChamberlain Yep, to również dobry przykład. –

4

Generalnie używam go do przypisywania tych samych właściwości do formantu.

btnSubmit.Enabled = btnAdd.Enabled = btnCancel.Enabled = txtID.Enabled= false; 
Powiązane problemy