Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reflection MemberInfo to Func<T1, T2>

I'm looking for a method to convert instance of MemberInfo to "Func" type (to use it through lambda expression later).

Lets, say I have a member function of type

public bool func(int);

Using reflection, I somehow get instance of MemberInfo "mi", now i want to convert it to Func<int, bool>; type. something like:

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

Is there a way to do it?

ps. Marc Grawell's answer resolves my issue, no need for further comments

like image 586
etwas77 Avatar asked Jul 30 '13 08:07

etwas77


1 Answers

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

Note here that target is the object you want to use, since func is a non-static method. If it was a static method, you can omit that (or pass null). Alternatively, you can omit target (or pass null) if you make it a Func<Foo, int, bool> where Foo is the type that declares func.

However!!! Note that having a Func<int,bool> is largely meaningless in terms of creating a lambda expression; lambda expressions rarely use delegates.

like image 109
Marc Gravell Avatar answered Oct 16 '22 16:10

Marc Gravell