È 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"); };
fonte
2010-04-28 07:18:30
quegli extra paren mi danno i jibblies –
se c'è un solo parametro su lambda, è possibile omettere la parentesi. '(op) =>' può essere abbreviato in 'op =>' –
È un'espressione lambda C# ** **. Puoi leggere tutto su di loro [qui] (http://msdn.microsoft.com/en-us/library/bb397687.aspx). –