Вложенные функции с рекурсией
Я просмотрел массу ссылок и увидел, что 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);
};