2010-10-26 15 views
27

Cosa sto facendo male qui? Come posso eseguire la mia azione?Chiamata ricorsiva - Azione lambda

var recurse = new Action<IItem, Int32>((item, depth) => 
{ 
    if (item.Items.Count() > 0) recurse(item, depth + 1); // red squiggly here 

    // ... 
}); 

sto ottenendo una rossa ondulata quando si chiama recurse dicendo "metodo, delegato o di un evento previsto".


Aggiornamento

Ho accettato risposta Homam. Vorrei solo aggiungere/condividere un'altra sintassi per lo stesso ... Ma che trovo un po 'più facile per gli occhi ...

Action<IEnumerable<Item>> Recurse = null; 

Recurse = item => 
{ 
    if (item.Items != null) Recurse(item.Items); 

    // ... 
}; 

risposta

48

basta definire il delegato Action e assegnare nulla ad esso prima di chiamare in modo ricorsivo.

Action<IItem, Int32> recurse = null; 

Poi

recurse = new Action<IItem, Int32>((item, depth) => 
{ 
    if (item.Items.Count() > 0) recurse(item, depth + 1); // red squiggly here 
    // ... 
}); 

Buona fortuna!

+0

Mi dispiacerebbe dover dividere la definizione e l'implementazione. C'è un modo per farlo in una riga di codice? – roosteronacid

+6

No. Eric spiega il motivo per cui nel suo post di blog (come al solito appare): http://blogs.msdn.com/b/ericlippert/archive/2006/08/18/706398.aspx –

+0

@Ron: bel bocconcino. Fa una specie di strano senso :) – roosteronacid

Problemi correlati