2013-07-30 66 views
5

Tôi đang tìm một phương pháp để chuyển đổi thể hiện của MemberInfo thành loại "Func" (để sử dụng nó thông qua biểu thức lambda sau).Phản ánh MemberInfo tới Func <T1, T2>

Cho phép, nói rằng tôi có một hàm thành viên của loại

public bool func(int); 

Sử dụng phản chiếu, tôi bằng cách nào đó có được thể hiện của MemberInfo "mi", bây giờ tôi muốn chuyển nó sang Func<int, bool>; loại. một cái gì đó như:

Func<int, bool f = myType.GetMember(mi.Name); 

Có cách nào để làm điều đó không?

ps. câu trả lời Marc Grawell của giải quyết vấn đề của tôi, không cần phải cho ý kiến ​​thêm

+0

Func là một hàm * trên một cá thể cụ thể *, trong khi MemberInfo không được gắn với một cá thể. Bạn có thể hiện trong mã của bạn? – Heinzi

+0

Mục tiêu nào bạn muốn gọi? Và bạn có biết đó là luôn luôn * sẽ trả về một 'bool' và lấy một' int'? Về cơ bản hãy nhìn vào 'Delegate.CreateDelegate' ... –

+0

Bạn có thể muốn kiểm tra tiền đề của mình; "để sử dụng nó thông qua biểu thức lambda sau" - nhận được một đại biểu sẽ không giúp bạn với một biểu thức lambda –

Trả lời

5
Func<int,bool> f = Delegate.CreateDelegate(
      typeof(Func<int,bool>), target, (MethodInfo)mi); 

Lưu ý ở đây rằng targetđối tượng bạn muốn sử dụng, vì func là một static phương pháp phi. Nếu đó là phương thức static, bạn có thể bỏ qua (hoặc vượt qua null). Ngoài ra, bạn có thể bỏ qua target (hoặc vượt qua null) nếu bạn đặt nó là Func<Foo, int, bool> trong đó Foo là loại khai báo func.

Tuy nhiên !!! Lưu ý rằng việc có một số Func<int,bool> phần lớn là vô nghĩa trong việc tạo ra một biểu thức lambda; biểu thức lambda hiếm khi sử dụng các đại biểu.

+0

Trong sự tò mò, bạn có biết nếu có bất kỳ sự khác biệt giữa 'Delegate.CreateDelegate' mà bạn sử dụng và' MethodInfo.CreateDelegate mà tôi đưa vào câu trả lời của tôi? – hvd

+0

Bạn có thể làm rõ ý nghĩa của câu nói cuối cùng của mình không, _ "Tuy nhiên ... biểu thức lambda hiếm khi sử dụng các đại biểu." _? – stakx

+0

@hvd trước .NET 4.5, một sự khác biệt rất lớn: 'MethodInfo.CreateDelegate' không tồn tại –