2010-10-26 19 views
27

¿Qué estoy haciendo mal aquí? ¿Cómo puedo ejecutar mi acción?Llamada recursiva - Acción lambda

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

    // ... 
}); 

Me estoy poniendo un serpenteante roja al llamar recurse diciendo "método, delegado o evento esperado".


actualización

He aceptado la respuesta de Homam. Sólo me gustaría añadir/compartir otra sintaxis para el mismo ... Pero lo que me parece un poco más fácil en los ojos ...

Action<IEnumerable<Item>> Recurse = null; 

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

    // ... 
}; 

Respuesta

48

apenas define el delegado Action y asignar nula a ella antes de poner punto recursivamente.

Action<IItem, Int32> recurse = null; 

Entonces

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

Buena suerte!

+0

No me gustaría tener que dividir la definición y la implementación. ¿Hay alguna manera de que pueda hacer esto en una línea de código? – roosteronacid

+6

No. Eric explica por qué en su entrada de blog (como es habitual, aparece): http://blogs.msdn.com/b/ericlippert/archive/2006/08/18/706398.aspx –

+0

@Ron: Nice tidbit. Tiene algún tipo de sentido extraño :) – roosteronacid

Cuestiones relacionadas