2008-11-14 15 views
56

Ho appena trovato questa sintassi in alcune delle domande in questo forum, ma Google e qualsiasi altro motore di ricerca tende a bloccare tutto tranne lettere e numeri nella ricerca, quindi è impossibile cercare "=>".Che cosa significa la sintassi '=>' in C#?

Quindi qualcuno può dirmi di cosa si tratta e come viene utilizzato?

+0

possibile duplicato di [espressione C# Lambda, perché dovrei usare questo?] (http://stackoverflow.com/questions/167343/c-sharp-lambda-expression-why-should-i-use-this) – nawfal

risposta

66

È l'operatore lambda.

Da C# 3 a C# 5, questo è stato utilizzato solo per lambda expressions. Si tratta fondamentalmente di una forma più breve di anonymous methods introdotta in C# 2, ma può anche essere convertita in expression trees.

Per fare un esempio:

Func<Person, string> nameProjection = p => p.Name; 

è equivalente a:

Func<Person, string> nameProjection = delegate (Person p) { return p.Name; }; 

In entrambi i casi si sta creando un delegato con un parametro Person, tornando nome di quella persona (come una stringa).

In C# 6 la stessa sintassi viene utilizzata per membri con corpo di espressione, ad es.

// Expression-bodied property 
public int IsValid => name != null && id != -1; 

// Expression-bodied method 
public int GetHashCode() => id.GetHashCode(); 

Consulta anche:

(e in effetti molte domande simili - provate il lambda e lambda-expressions tag.)

0.123.516,41 mila
+0

Poiché la domanda non dice nulla riguardo al caso esatto in cui viene chiesto, forse considerare l'aggiornamento questa risposta per contenere anche la nuova sintassi dei membri del corpo di espressione? –

+0

@ LasseV.Karlsen: Certo, lo farò ... –

+0

Bello :) Sono arrivato qui perché questa domanda era usata come bersaglio per la chiusura duplicata, quindi ho pensato che sarebbe stato carino avere 1 risposta invece di andare a caccia di un altro uno in questi altri casi :) –

2

Invece di usare metodo anonimo come questo:

somevar.Find(delegate(int n) 
{ 
    if(n < 10) 
     return n; 
}); 

è sufficiente scrivere in questo modo:

somevar.Find(n => n < 10); 

Ci vorrà il tipo di dati in base al valore di ritorno.

0

Significa fondamentalmente "va in", come un parametro di

MyObjectReference => MyObjectReference.DoSomething() 

di solito li si utilizza per passare le funzioni in metodi come parametri, o in LINQ dichiarazioni

MyCollection.Where(myobj => myobj.Age>10) 

per esempio.

14

Significa meraviglia. Ad es.

rappresenta un metodo che accetta x come parametro e ne restituisce il successore.

button.Click += new EventHandler((sender, e) => methodInfo.Invoke(null, new object[] { sender, e })); 

assegna un gestore di eventi a un pulsante richiamando un metodo che contiene un metodo.

7

Ecco un semplice esempio da MSDN

delegate int del(int i); 
del myDelegate = x => x * x; 
int j = myDelegate(5); //j = 25 

nulla prima => sono i parametri di input, e nulla dopo è l'espressione. Puoi avere più parametri di input. Lambdas sono utilizzati principalmente con Linq.

0

Fa parte della sintassi di un'espressione lambda. Un'espressione lambda è essenzialmente una forma abbreviata di un delegato o di un metodo anonimo. Per illustrare, supponiamo di avere una serie di stringhe che corrispondono alle lettere dell'alfabeto. Potrei scegliere i membri di quell'array che contenevano valori maggiori di "E" con la seguente espressione LINQ:

var someLetters = alphabet.Where (l => l> "E");

La parte dell'espressione lambda a sinistra di "=>" identifica il nome della variabile per il test (che è impostato sui singoli membri dell'alfabeto) e la parte dell'espressione lambda alla destra di " => "identifica l'elaborazione. In questo caso l'elaborazione produce un valore booleano che la logica Where utilizza per determinare se ciascun membro dell'alfabeto viene passato attraverso l'array someLetters.

7

È un'altra forma di notazione di funzione. Quanto segue è grosso modo equivalente:

Pensare a un'espressione lambda come dire "dato qualcosa, restituire qualcosa". Nell'esempio sopra, la funzione x => x dice "data x, restituisce x". (Anche se le espressioni lambda non hanno necessariamente bisogno di restituire qualcosa, in tal caso potresti leggerle come "dato x, fare qualcosa con x".)