2010-04-28 9 views
13

Stavo guardando un video tutorial di Silverlight e mi sono imbattuto in un'espressione non familiare nel codice di esempio.Che cos'è '=>'? (Domanda grammatica C#)

cosa è =>? come si chiama? potresti fornirci un link? Non riesco a cercarlo perché sono caratteri speciali.

codice

:

 var ctx = new EventManagerDomainContext(); 
     ctx.Events.Add(newEvent); 
     ctx.SubmitChanges((op) => 
     { 
      if (!op.HasError) 
      { 
       NavigateToEditEvent(newEvent.EventID); 
      } 
     }, null); 
+0

quegli extra paren mi danno i jibblies –

+2

se c'è un solo parametro su lambda, è possibile omettere la parentesi. '(op) =>' può essere abbreviato in 'op =>' –

+0

È un'espressione lambda C# ** **. Puoi leggere tutto su di loro [qui] (http://msdn.microsoft.com/en-us/library/bb397687.aspx). –

risposta

11

Lambda operator:

un'espressione lambda è un anonymous function che è possibile utilizzare per creare delegates o expression tree tipi. Usando espressioni lambda, puoi scrivere funzioni locali che possono essere passate come argomenti o restituite come valore delle chiamate di funzione ...

Huzzah!

+0

Lambda mi fa sempre pensare alla lisp, la prima lingua che ho imparato con le espressioni lambda. – Patrick

+0

@Patrick perché Lisp è fortemente basato sul calcolo lambda http://en.wikipedia.org/wiki/Lambda_calculus, che è anche il punto in cui il nome di questo operatore viene da – AakashM

14

È un lambda expression.

Se si ha familiarità con i metodi anonimi di C# 2, le espressioni lambda sono per lo più simili ma più concise. Quindi il codice che hai potrebbe essere scritta come questo con un metodo anonimo:

var ctx = new EventManagerDomainContext(); 
ctx.Events.Add(newEvent); 
ctx.SubmitChanges(delegate(Operation op) 
{ 
    if (!op.HasError) 
    { 
     NavigateToEditEvent(newEvent.EventID); 
    } 
}, null); 

Aspetti di metodi anonimi, come il comportamento delle variabili catturati funzionano allo stesso modo per le espressioni lambda. Le espressioni Lambda e i metodi anonimi sono chiamati collettivamente funzioni anonime.

ci sono alcune differenze, però:

  • lambda espressioni possono essere convertiti in expression trees così come delegati.
  • Lambda espressioni hanno un certo numero di tasti di scelta rapida per renderli più concisa:

    • Se il compilatore può dedurre i tipi di parametri, non è necessario specificare loro
    • Se il corpo è una singola istruzione , non c'è bisogno di mettere tra parentesi graffe e si può omettere la parte "ritorno" di una dichiarazione di ritorno
    • Se si dispone di un singolo parametro con un tipo derivato, è possibile perdere le staffe

    Mettendo insieme questi, si ottiene cose come:

    IEnumerable<string> names = people.Select(person => person.Name); 
    
  • Espressioni lambda non mi sostenere il "non mi importa quanti parametri ci sono" sotto forma di metodi anonimi, per esempio

    EventHandler x = delegate { Console.WriteLine("I was called"); }; 
    
1

non ho potuto cercarlo perché sono i caratteri speciali.

A volte i modi antiquati sono i migliori. Questo ha funzionato per me:

  • Avviare Visual Studio 2008 o successivo
  • Hit F1
  • Una volta che l'Explorer Aiuto documento ha messo a punto, assicurare la scheda Index è selezionato nel pannello a sinistra
  • Inserisci => nel campo Cerca
  • Il primo elemento nell'elenco è ora l'articolo della guida che è necessario.
+2

Oh snap! :-) Ma a volte penso che la gente macchi il loro tasto F1 per aprire SO – Patrick