递归调用 - 动作lambda

时间:2010-10-26 14:11:06

标签: c# recursion delegates

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

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

    // ...
});

我在拨打recurse“方法,代表或事件预期”时会发出红色波浪形。


更新

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

Action<IEnumerable<Item>> Recurse = null;

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

    // ...
};

1 个答案:

答案 0 :(得分:54)

只需定义委托Action并在递归调用之前为其指定null。

Action<IItem, Int32> recurse = null;

然后

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