Вложенные функции с рекурсией

Я просмотрел массу ссылок и увидел, что C# поддерживает вложенные функции через лямбду, но я совершенно новичок в C# (и.NET в этом отношении). Я хочу написать реализацию заливки, с параметрами родительской функции, доступными для вложенного дочернего элемента.

Вот как это должно выглядеть в идеале:

private void StartFloodFill(color,otherstuff,pixel)
{
      function Recursion(pixel,color)
      {
             do(otherstuff);
             //etc...
             Recursion(pixel,color);
      }
}

Recursion(pixel,color); Звоните, где мое замешательство лежит. Я не могу получить доступ к ссылке на функцию изнутри функции.

Я знаю, что для этого должен быть обходной путь, но я не знаю, что это такое. Как я могу реализовать рекурсивную функцию, как показано выше в C#?

1 ответ

Решение

Как и предполагалось, вы можете использовать рекурсивный делегат. Обычно вы бы объявили делегата следующим образом:

Func<int,int, int> = (a, b) => a+b;

куда Func<int, int, int> тип делегата, который принимает 2 дюйма и возвращает другой тип int.

Но так как вы хотите, чтобы он вызывал сам себя, вы должны объявить переменную перед назначением делегата.

Func<Pixel, Color, SomeType> func = null;

func = (pixel, color) => {
    //do stuff...

    if(endCondition)
       return someTypeValue;
    else
       return func(pixel, color);
};
Другие вопросы по тегам