2009-10-28 11 views
5

Recentemente ho chiesto una domanda qui, e qualcuno fornito questa risposta:Che cosa fa il simbolo "=>" dopo il mio metodo in questo codice C#?

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); 
} 

cosa è che => fare? È la prima volta che vedo questo.

+0

Operatore Lambda. Secondo quello che ho letto, è pronunciato "va a" quando si parla ad alta voce (proprio come una nota a margine). –

+1

http://msdn.microsoft.com/en-us/library/bb397687.aspx per ulteriori informazioni .... –

risposta

10

Fondamentalmente si dice: "Sto dando questo (s,b)" e voi mi state restituendo s*b o qualcosa e se si sta utilizzando lambda con le espressioni, ma può essere qualcosa di simile: io vi do questo (s,b) e fare qualcosa con loro nel blocco di istruzioni del tipo:

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

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

A Lambda expression è un metodo senza nome scritto al posto di un'istanza delegata. Il compilatore converte immediatamente l'espressione lambda a uno:

  • Un esempio delegato
  • Un'espressione Albero

delegate int Transformer(int i);

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

} 

Potremmo riscrivere così:

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;} 
} 

Un'espressione lambda ha la seguente forma:

(parameters) => expression or statement-block

Nell'esempio precedente si registra un solo parametro, x, e l'espressione è x*x

nel nostro esempio, x corrisponde al parametro i, e l'espressione x*x corrisponde al tipo di ritorno int, quindi compatibile con il delegato di Transformer; Codice

delegate int Transformer (int i);

Una di espressione lambda può essere un blocco di istruzioni, invece di un'espressione. Possiamo riscrivere il nostro esempio come segue:

x => {return x*x;} 

un albero di espressione, di tipo Expression<T>, che rappresenta il codice all'interno dell'espressione Lamda in un modello di oggetti attraversabile.Ciò consente l'espressione lambda di essere intrepreted in seguito in fase di esecuzione (Si prega di controllare la "Espressione di query" per LINQ)

19

Questo è l'operatore lambda. Si definisce una funzione anonima che prende due argomenti (s, args) (gli identificatori di tipo omessi) e il corpo di detta funzione è ciò che appare dopo il simbolo =>.

È concettualmente lo stesso di questo:

... 
client.DownloadStringCompleted += Foo; 
} 

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

Il => è il Lambda Operator. È un ragazzino a portata di mano che può aiutarti a rendere il tuo codice più leggibile e meno ingombrante.