2015-01-16 18 views
12

Tôi muốn viết một phương thức thực hiện một số công việc và cuối cùng trả về một phương thức khác có cùng chữ ký với phương thức gốc. Ý tưởng là để xử lý một dòng byte tùy thuộc vào giá trị byte trước đó tuần tự mà không đi vào một đệ quy. Bằng cách gọi điện như sau:Làm cách nào để khai báo một Func Delegate trả về một Func Delegate cùng loại?

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 
} 

Để bàn giao phương thức tôi muốn gán cho đại biểu Func. Nhưng tôi đã gặp phải sự cố rằng điều này dẫn đến việc khai báo đệ quy mà không bị chấm dứt ...

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

Tôi bằng cách nào đó bị mất ở đây. Làm thế nào tôi có thể vượt qua điều đó?

Trả lời

10

Bạn chỉ có thể tuyên bố một loại đại biểu khi được xác định trước Func<...> đại biểu là chưa đủ:

public delegate RecursiveFunc RecursiveFunc(byte input); 

Và trong trường hợp bạn cần đến nó, bạn có thể sử dụng Generics quá:

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

Chữ ký của phương pháp này không biết lúc biên dịch. Anh ta không biết rằng tham số là một 'Byte'. – Servy

+4

@Servy Trong trường hợp đó ... 'delegate RecursiveFunc RecursiveFunc (đầu vào T)' –

+0

xuất sắc - hoạt động như một sự quyến rũ. Trong trường hợp của tôi, tôi biết rằng nó sẽ là một Byte, nhưng 1 cho phiên bản chung. – Marwie

Các vấn đề liên quan