Как объявить делегат Func, который возвращает делегат Func того же типа?

Я хотел бы написать метод, который выполняет некоторую работу и, наконец, возвращает другой метод с той же сигнатурой, что и исходный метод. Идея состоит в том, чтобы обрабатывать поток байтов в зависимости от предыдущего байтового значения последовательно, не вдаваясь в рекурсию. Называя это так:

MyDelegate executeMethod = handleFirstByte //What form should be MyDelegate?

foreach (Byte myByte in Bytes)
{
    executeMethod = executeMethod(myByte); //does stuff on byte and returns the method to handle the following byte
}

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

Func<byte, Func<byte, <Func<byte, etc... >>>

Я как-то потерялся здесь. Как я могу обойти это?

Ответ 1

Вы можете просто объявить тип делегата, когда предопределенные делегаты Func<...> не достаточны:

public delegate RecursiveFunc RecursiveFunc(byte input);

И если вам это нужно, вы также можете использовать generics:

public delegate RecursiveFunc<T> RecursiveFunc<T>(T input);