Есть класс, в котором определен метод Test, например:
Чтобы получить Action на основе имени метода Test надо выполнить следующий код:
var a = mc.CreateAction("Test"); |
a(); // будет вызван метод Test |
Весь "секрет" находится в методах расширения:
public static class MetodInfoExtension |
| public static Action CreateAction(this object instance, string methodName) |
| return instance.GetType().GetMethod(methodName).CreateAction(instance); |
| public static Action CreateAction(this MethodInfo methodInfo, object target) |
| var call = System.Linq.Expressions.Expression.Call(System.Linq.Expressions.Expression.Constant(target), methodInfo); |
| var lambda = System.Linq.Expressions.Expression.Lambda<Action>(call); |
| var ret = lambda.Compile(); |
В остальных случаях можно создать Action с помощью следующих строк:
Expression<Action> exa = () => Test(); |
Action a = exa.Compile(); |
Комментариев нет:
Отправить комментарий