Obtenir un délégué de methodinfo

J’ai une liste déroulante qui est renseignée en inspectant les méthodes d’une classe et en incluant celles qui correspondent à une signature spécifique. Le problème consiste à extraire l’élément sélectionné de la liste et à amener le délégué à appeler cette méthode dans la classe. La première méthode fonctionne, mais je ne peux pas comprendre une partie de la seconde.

Par exemple,

public delegate void MyDelegate(MyState state); public static MyDelegate GetMyDelegateFromSsortingng(ssortingng methodName) { switch (methodName) { case "CallMethodOne": return MyFunctionsClass.CallMethodOne; case "CallMethodTwo": return MyFunctionsClass.CallMethodTwo; default: return MyFunctionsClass.CallMethodOne; } } public static MyDelegate GetMyDelegateFromSsortingngReflection(ssortingng methodName) { MyDelegate function = MyFunctionsClass.CallMethodOne; Type inf = typeof(MyFunctionsClass); foreach (var method in inf.GetMethods()) { if (method.Name == methodName) { //function = method; //how do I get the function to call? } } return function; } 

Comment faire fonctionner la section commentée de la deuxième méthode? Comment MethodInfo le MethodInfo dans le délégué?

Merci!

Edit: Voici la solution de travail.

 public static MyDelegate GetMyDelegateFromSsortingngReflection(ssortingng methodName) { MyDelegate function = MyFunctionsClass.CallMethodOne; Type inf = typeof(MyFunctionsClass); foreach (var method in inf.GetMethods()) { if (method.Name == methodName) { function = (MyDelegate)Delegate.CreateDelegate(typeof(MyDelegate), method); } } return function; } 

Vous devrez appeler une forme de Delegate.CreateDelegate () , selon que la méthode en question est une méthode statique ou une méthode d’instance.

 private static Delegate CreateDelegate(this MethodInfo methodInfo, object target) { Func getType; var isAction = methodInfo.ReturnType.Equals((typeof(void))); var types = methodInfo.GetParameters().Select(p => p.ParameterType); if (isAction) { getType = Expression.GetActionType; } else { getType = Expression.GetFuncType; types = types.Concat(new[] { methodInfo.ReturnType }); } if (methodInfo.IsStatic) { return Delegate.CreateDelegate(getType(types.ToArray()), methodInfo); } return Delegate.CreateDelegate(getType(types.ToArray()), target, methodInfo.Name); }