2009-10-28 4 views
5

Ich fragte vor kurzem eine Frage hier, und jemand zur Verfügung gestellt diese Antwort:Was macht das Symbol "=>" nach meiner Methode in diesem C# -Code?

private void button1_Click(object sender, EventArgs e) 
{ 
    var client = new WebClient(); 
    Uri X = new Uri("http://www.google.com"); 

    client.DownloadStringCompleted += (s, args) => //THIS, WHAT IS IT DOING? 
    { 
     if (args.Error == null && !args.Cancelled) 
     { 
      MessageBox.Show(); 
     } 
    }; 

    client.DownloadStringAsync(X); 
} 

Was ist das => zu tun? Es ist das erste Mal, dass ich das sehe.

+0

Lambda-Operator. Laut dem, was ich gelesen habe, wird es ausgesprochen, wenn man laut spricht (nur als Randnotiz). –

+1

http://msdn.microsoft.com/en-us/library/bb397687.aspx für weitere Informationen .... –

Antwort

10

Im Grunde sagt er „ich euch (s,b) gebe“ und du mir s*b oder etwas zurückgeben, und wenn Sie Lambda mit Ausdrücken verwenden, aber es kann so etwas wie dies: ich ihnen gebe diese (s,b) und etwas tun mit sie in dem Anweisungsblock wie:

{ 
    int k = a+b; 
    k = Math.Blah(k); 
    return k; 
} 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~

Ein Lambda Ausdruck ist eine unbenannte Methode, die anstelle einer Delegat-Instanz geschrieben wird. Der Compiler sofort wandelt die Lambda-Ausdruck entweder:

  • A Delegatinstanz
  • Ein Ausdruck Baum

delegate int Transformer(int i);

class Test{ 
    static void Main(){ 
    Transformer square = x => x*x; 
    Console.WriteLine(square(3)); 
    } 

} 

Wir es so umschreiben könnte:

delegate int Transformer(int i);

class Test{ 
    static void Main(){ 
    Transformer square = Square; 
    Console.WriteLine(square(3)); 
    } 
    static int Square (int x) {return x*x;} 
} 

Ein Lambda-Ausdruck hat die folgende Form:

(parameters) => expression or statement-block

Im vorherigen Beispiel ein einzelner Parameter war, x, und der Ausdruck ist x*x

in unserem Beispiel x entsprechen zu Parameter i, und der Ausdruck x*x entspricht dem Rückgabetyp int, daher kompatibel mit Transformer-Delegaten;

delegate int Transformer (int i);

ein Code der Lambda-Ausdruck kann ein Anweisungsblock statt ein Ausdruck sein. Wir können unser Beispiel wie folgt umschreiben:

x => {return x*x;} 

Einen Ausdrucksbaum, vom Typ Expression<T>, die den Code innerhalb der lamda-Expression in einem verfahrbaren Objektmodell.Dadurch kann der Lambda-Ausdruck später zur Laufzeit neu dargestellt werden. (Bitte überprüfen Sie den "Query Expression" für LINQ)

19

Das ist der Lambda-Operator. Sie definieren eine anonyme Funktion, die zwei Argumente (s, args) verwendet (type specifiers ausgelassen), und der Körper dieser Funktion ist, was nach dem Zeichen => erscheint.

Es ist vom Konzept her die gleiche wie folgt aus:

... 
client.DownloadStringCompleted += Foo; 
} 

void Foo(object sender, EventArgs args) 
{ 
    if (args.Error == null && !args.Cancelled) 
    { 
     MessageBox.Show(); 
    } 
}; 
6

Die> = die Lambda Operator ist. Es ist ein handlicher kleiner Typ, der Ihnen helfen kann, Ihren Code lesbarer und weniger überladen zu machen.