Рекурсивный вызов - Действие лямбда - PullRequest
33 голосов
/ 26 октября 2010

Что я здесь не так делаю?Как я могу выполнить свое действие?

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

    // ...
});

При вызове recurse, говоря "я ожидаю, что получен метод, делегат или событие" .

Обновление

Я принял ответ Хомама.Я просто хотел бы добавить / поделиться другим синтаксисом для того же ... Но который я нахожу немного проще для глаз ...

Action<IEnumerable<Item>> Recurse = null;

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

    // ...
};

1 Ответ

55 голосов
/ 26 октября 2010

Просто определите делегата 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
    // ...
});

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...