递归调用 - 动作lambda

cll*_*pse 36 c# recursion delegates

我在这做错了什么?我该如何执行我的行动?

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

    // ...
});
Run Code Online (Sandbox Code Playgroud)

当打电话recurse"方法,代表或事件预期"时,我得到了一个红色的波浪形.


更新

我接受了Homam的回答.我只是想添加/分享同样的另一种语法......但是我觉得眼睛看起来更容易......

Action<IEnumerable<Item>> Recurse = null;

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

    // ...
};
Run Code Online (Sandbox Code Playgroud)

Hom*_*mam 59

只需定义委托Action并在递归调用它之前为其赋值null.

Action<IItem, Int32> recurse = null;
Run Code Online (Sandbox Code Playgroud)

然后

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

祝好运!

  • 埃里克解释了为什么在他的博客文章中(通常看起来如此):http://blogs.msdn.com/b/ericlippert/archive/2006/08/18/706398.aspx (6认同)