2009-07-28 29 views
13

Perdonami se questo grida novizio ma cosa significa "=>" in C#? Sono stato a una presentazione la scorsa settimana e questo operatore (credo) è stato utilizzato nel contesto di ORM. Non stavo davvero prestando attenzione alle specifiche della sintassi fino a quando non sono tornato ai miei appunti.Che cosa significa "=>"?

+0

Questo è un duplicato. Non riesco a trovarne uno che sia uno. –

+0

Questa è una ricerca molto difficile. Anche su Google. –

+0

Non sapeva che si chiamava "operatore lambda". –

risposta

13

In C# il lambda operator è scritto "=>" (di solito si pronuncia "va a" quando leggere ad alta voce). Significa che gli argomenti a sinistra vengono passati nel blocco di codice (funzione lambda/delegato anonimo) sulla destra.

Quindi, se si dispone di un Func o di un'azione (o uno qualsiasi dei loro cugini con più parametri di tipo), è possibile assegnare un'espressione lambda anziché richiedere un'istanza di un delegato o un metodo separato per l'elaborazione posticipata:

//creates a Func that can be called later 
Func<int,bool> f = i => i <= 10; 
//calls the function with 12 substituted as the parameter 
bool ret = f(12); 
+4

Non ho mai notato quanto sia confuso quando attacchi lambda con "minore o uguale". Finisce per assomigliare a tutte le frecce che puntano verso i. –

1

È un operatore lambda, parte di un lambda expression.

Tutte le espressioni lambda utilizzano l'operatore lambda =>, che viene letto come "va a". Il lato sinistro dell'operatore lambda specifica i parametri di input (se presenti) e il lato destro contiene l'espressione o il blocco di dichiarazione . L'espressione lambda x => x * x viene letta "x passa a x volte x".

7

È una scorciatoia per la dichiarazione di lambda.

i => i++ 

è (quasi) la stessa di scrittura:

delegate(int i) 
{ 
    i++; 
} 

Nel contesto:

void DoSomething(Action<int> doSomething) 
{ 
    doSomething(1); 
} 

DoSomething(delegate(int i) { i++; }); 
//declares an anonymous method 
//and passes it to DoSomething 

che è (quasi) la stessa di scrittura:

void increment(int i) 
{ 
    i++; 
} 

Solo senza dargli un nome, ti permette di dichiarare una funzione in-line, nota come funzione "anonima".

3

Quando detto ad alta voce l'operatore è il lambda (passa a) operatore che aiuta a definire il delegato anonimo che si sta definendo nel lambda.

Un luogo comune per vedere questo è con un gestore di eventi. Ti capiterà spesso di avere aa evento pagina tipo di carico che viene gestito da una lambda con il seguente codice:

this.Loaded += (o, e) => { 

// code 

} 

Hai definito una gestione dell'evento Loaded anonimo metodo (non ha un nome) utilizzando un espressione lambda. Avrebbe letto "o, e va a ... definizione del metodo con foo".

1

È la sintassi per dichiarare una funzione anonima, nota in C# come "espressione lambda".

Ad esempio, (int p) => p * 2 rappresenta una funzione che prende un numero intero e lo moltiplica per due.

+0

Tecnicamente, l'intero corpo (int p) => p * 2 è un'espressione lambda. Il => è solo l'operatore lambda. –

3

Questo è l '"operatore lambda" e lo leggi come "passa a". Diciamo che ha avuto la dichiarazione:

doSomething(x => x + " hi"); 

è possibile sostituire il "=>" nella vostra mente con questo:

doSomething(delegate (string x) { return x + " hi" }); 

Come si può vedere, offre un diavolo di una scorciatoia. Il compilatore calcola il tipo di variabile che stai passando e ti permette di eliminare la firma della funzione e il bracketing per il codice in cui stai passando le variabili di firma.

+1

Puoi anche leggerlo come "diventa" o "mappa" –

+1

Ho sentito "iniezioni", "frecce", qualcosa di volgare che non dirò qui, e un altro paio. Il mio preferito finora è "uguale a quello più grande". – womp

+2

Ho appena detto "lambda" ora, invece di preoccuparmi delle innumerevoli variazioni possibili. –

8

Dal momento che nessuno ne ha parlato ancora, in VB.NET devi usare la parola chiave funzione invece di =>, in questo modo:

dim func = function() true 
'or 
dim func1 = function(x, y) x + y 

dim result = func() ' result is True 
dim result1 = func1(5, 2) ' result is 7 
+1

Vengo nuovamente respinto senza motivo. Il tizio che ha posto la domanda ha detto che è un ragazzo VB.NET, quindi offrire una spiegazione in termini di VB.NET ha senso. –

+0

Non hai risposto alla sua domanda specifica, ma non vedo perché dargli un'informazione che potrebbe aiutarlo a relazionarsi meglio meriterebbe un downvote. +1 per negarlo. – Brandon

+0

+1, stavo per aggiungere anche questa risposta ... Pazzesco che qualcuno lo sottovalutasse, è molto utile sapere per un ragazzo VB.NET ... –