2009-12-11 24 views
5

Tôi đã có một phương pháp (FYI, tôi đang sử dụng C#), chấp nhận một tham số của kiểu "Func", giả sử nó được định nghĩa như vậy:đèo phương pháp, tạo ra với phản ánh, như tham số Func

MethodAcceptingFuncParam(Func<bool> thefunction); 

tôi đã xác định các chức năng để vượt qua trong như vậy:

public bool DoStuff() 
{ 
    return true; 
} 

tôi có thể dễ dàng gọi đây là như vậy:

MethodAcceptingFuncParam(() => { return DoStuff(); }); 

này hoạt động như mong muốn, cho đến nay rất tốt

Bây giờ, thay vì đi qua trong phương pháp DoStuff(), tôi muốn tạo ra phương pháp này thông qua phản ánh, và chuyển thông tin này tại:

Type containingType = Type.GetType("Namespace.ClassContainingDoStuff"); 
MethodInfo mi = containingType.GetMethod("DoStuff"); 

=> làm việc này, tôi có thể nhận được MethodInfo một cách chính xác.

Nhưng đây là nơi tôi đang bị mắc kẹt: bây giờ tôi muốn làm một cái gì đó giống như

MethodAcceptingFuncParam(() => { return mi.??? }); 

Nói cách khác, tôi muốn vượt qua trong các phương pháp tôi chỉ đột phá vòng vây phản ánh làm giá trị cho tham số Func của phương thức MethodAcceptingFuncParam. Bất kỳ manh mối nào về cách đạt được điều này?

Trả lời

9

Bạn có thể sử dụng Delegate.CreateDelegate nếu các loại phù hợp.

Ví dụ:

var func = (Func<bool>) Delegate.CreateDelegate(typeof(Func<bool>), mi); 
MethodAcceptingFuncParam(func); 

Lưu ý rằng nếu hàm được thực hiện rất nhiều trong MethodAcceptingFuncParam, đây sẽ là nhiều nhanh hơn gọi mi.Invoke và đúc kết quả.

1

Sử dụng Gọi:

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