Вы можете создать повторно используемого делегата, например, если хотите. учитывая мой тип:
public class MyClass
{
public void DoSomething(string argument1, int argument2)
{
Console.WriteLine(argument1);
Console.WriteLine(argument2);
}
}
Я мог бы сделать что-то вроде:
Action<object, MethodInfo, string, int> action =
(obj, m, arg1, arg2) => m.Invoke(obj, new object[] { arg1, arg2 });
И назовите это как:
var method = typeof(MyClass).GetMethod("DoSomething");
var instance = new MyClass();
action(instance, method, "Hello", 24);
Если вы знаете, что у вашего метода есть тип возвращаемого значения, вы можете сделать это с помощью System.Func
делегата:
public class MyClass
{
public string DoSomething(string argument1, int argument2)
{
return string.Format("{0} {1}", argument1, argument2);
}
}
Func<object, MethodInfo, string, int, string> func =
(obj, m, arg1, arg2) => (string)m.Invoke(obj, new object[] { arg1, arg2 });
string result = func(instance, method, "Hello", 24);