Lets rendere semplice
lambda espressioni sono davvero a portata di mano per rendere il codice più breve e più leggibile. Tuttavia, i programmatori entry-level potrebbero trovarlo un po 'difficile da gestire. Ci sono tre concetti separati da seguire: metodi anonimi, delegati e espressioni lambda. Una dettagliata descrizione di ognuno di essi va oltre lo scopo di questa risposta. Spero che l'esempio di codice fornito di seguito serva allo scopo di dare una rapida visione dei diversi approcci disponibili.
class TestBed
{
BackgroundWorker bgw = new BackgroundWorker();
void sample()
{
//approach #1
bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
//DoWorkEventHandler is nothing but a readily available delegate written by smart Microsoft guys
//approach #2, to make it a little shorter
bgw.DoWork += (s,e) =>
{
//...
};
//this is called lambda expression (see the => symbol)
//approach #3, if lambda scares you
bgw.DoWork += delegate
{
//... (but you can't have parameters in this approach
};
//approach #4, have a helper method to prepare the background worker
prepareBgw((s,e)=>
{
//...
}
);
//approach #5, helper along with a simple delegate, but no params possible
prepareBgw(delegate
{
//...
}
);
//approach #6, helper along with passing the methodname as a delegate
prepareBgw(bgw_DoWork);
//approach #7, helper method applied on approach #1
prepareBgw(new DoWorkEventHandler(bgw_DoWork));
}
void bgw_DoWork(object sender, DoWorkEventArgs e)
{
//...
}
void prepareBgw(DoWorkEventHandler doWork)
{
bgw.DoWork+= doWork;
}
}
Nota che abbiamo usato "delegato" e non "delegato" in questo esempio (c'è una differenza tra i due)
fonte
2014-04-18 09:24:54
@Jader: A cura in modo che sia l'equivalente della mia risposta. Perché non votare la mia risposta? –