2012-01-07 12 views
10

Sono nuovo in questo campo LINQ e una cosa sto cercando di fare.Come posso combinare più istruzioni in espressione lambda

Ho un delegato di azione (scritto di seguito) che voglio convertire in espressione lambda.

 Action<string> custom = delegate(string name) 
      { 
       lstCutomers.Add(new Customer(name, coutries[cnt])); 
       name = name + " Object Created"; 
      }; 

Quale sarà l'espressione lambda per lo stesso. Voglio solo sapere che posso scrivere più affermazioni in lambda se no, allora perché?

Grazie in anticipo.

+0

Sì, è possibile scrivere una singola istruzione o un blocco di dichiarazione – Peeyush

+0

Partenza: http://stackoverflow.com/questions/299703/delegate-keyword-vs- notazione lambda per una discussione dettagliata sulla notazione dei delegati Vs notazione Lambda. –

+0

Ti rendi conto che assegnare un valore a 'name' non avrà alcun effetto, giusto? Quindi la tua seconda affermazione è irrilevante, e puoi usare un lambda non-statement. O hai dato un cattivo esempio, o probabilmente hai un bug nel tuo codice ... –

risposta

18

Non è possibile creare un'espressione lambda , poiché non si restituisce nulla. È comunque possibile creare un dichiarazione lambda:

Action<string> custom = (name) => 
     { 
      lstCutomers.Add(new Customer(name, coutries[cnt])); 
      name = name + " Object Created"; 
     }; 
+0

che sarebbe il metodo anonimo. Dovrebbe essere qualcosa come Azione customLambda = (name) => lstCutomers.Add (nuovo Cliente (nome, coutries [cnt]); name = name + "Object Created";); Che non sta compilando anche. –

+0

Non sono sicuro quindi, poiché 'Expression' ha sempre un valore. Ho pensato che '=>' l'abbia resa un'espressione lambda (che viene convertita in un metodo anonimo a causa del tipo di custom). –

+1

@DJ: Da [MSDN] (http://msdn.microsoft.com/en-us/library/bb397687.aspx) 'Un'espressione lambda è una funzione anonima che può contenere espressioni e istruzioni', vedere la sezione su Dichiarazione Lambdas. Ho aggiornato la mia risposta. –