2015-01-16 8 views
12

Ich möchte eine Methode schreiben, die etwas Arbeit und schließlich eine andere Methode mit der gleichen Signatur wie die ursprüngliche Methode zurückgibt. Die Idee besteht darin, einen Byte-Strom abhängig von dem vorherigen Byte-Wert sequentiell zu behandeln, ohne in eine Rekursion zu gehen. Durch Aufruf wie folgt:Wie deklariere ich einen Func-Delegaten, der einen Func-Delegaten des gleichen Typs zurückgibt?

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 
} 

Um die Methode übergeben möchte ich sie zu einem Func-Delegaten zuweisen. Aber ich lief in das Problem, dass diese ohne Terminierung in einer rekursiven Erklärung führt ...

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

Ich bin hier irgendwie verloren. Wie konnte ich das umgehen?

Antwort

10

Sie können einfach eine Delegattyp wenn die vordefinierten Func<...> Delegierten nicht ausreichen, um erklären:

public delegate RecursiveFunc RecursiveFunc(byte input); 

Und Sie müssen es in Fall können Sie Generika verwenden:

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

Die Signatur Die Methode ist zur Kompilierzeit jedoch nicht bekannt. Er weiß nicht, dass der Parameter ein "Byte" ist. – Servy

+4

@Servy In diesem Fall ... Delegat RecursiveFunc RecursiveFunc (T-Eingang) ' –

+0

ausgezeichnet - funktioniert wie ein Charme. In meinem Fall weiß ich, dass es ein Byte sein wird, aber +1 für die generische Version. – Marwie