Есть класс, в котором определен метод 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(); |
Комментариев нет:
Отправить комментарий