2015-01-16 83 views
12

我想編寫一個方法來完成一些工作,並最終返回與原始方法具有相同簽名的另一個方法。這個想法是根據先前的字節值順序處理一個字節流,而不進行遞歸。通過這樣調用它:如何聲明一個返回相同類型的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... >>> 

我不知何故在這裏丟失。我怎麼能解決這個問題?

回答

10

你可以簡單的聲明,當預定義Func<...>代表是不夠的委託類型:

public delegate RecursiveFunc RecursiveFunc(byte input); 

而如果你需要它,你可以使用泛型太:

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

的簽名該方法雖然在編譯時不知道。他不知道該參數是「Byte」。 – Servy

+4

@Servy在這種情況下...'代表RecursiveFunc RecursiveFunc (T輸入)' –

+0

優秀 - 作品像魅力。在我的情況下,我知道這將是一個字節,但對於通用版本是+1。 – Marwie