with visual sirve que para delegate c# linq reflection delegates action

c# - visual - msdn invoke



La forma más segura de obtener Invoke MethodInfo desde Action<T> ''s Instance (1)

A menos que malinterprete tu intención, todo este enfoque parece innecesario. Puede adquirir el MethodInfo para el método exacto detrás de un delegado, así:

Action<Foo> myAction = //get delegate... MethodInfo theMethod = myAction.Method;

Si la Action<T> se myAction.Target al método de una instancia específica, esa instancia está disponible desde la propiedad myAction.Target .

Actualmente estoy trabajando en un método de extensión que facilita lo que sugiere el título de la pregunta.

Podría, por supuesto. use la llamada al método GetMetohd ("Invoke") en el tipo y termine con eso, pero algo me dice que esta no es la manera "más segura" de hacerlo. Las clases y los tipos pueden cambiar, incluidos los del BCL.

Así que se me ocurrió la siguiente declaración LINQ, que funciona bien:

public static class ActionExtensions { public static MethodInfo GetInvoke<T>(this Action<T> obj) { var actionType = obj.GetType(); var tType= typeof(T); return ( from methodInfo in actionType.GetMethods() let par = methodInfo.GetParameters() where par.Length == 1 && par[0].ParameterType == tType select methodInfo ).FirstOrDefault(); } }

La cuestión es que incluso esto se siente algo dudoso, ya que un día Acción puede cambiar y contener otro método con tales características ... incluso si agrego la restricción "HasGenericParameters", no hay garantía de seguridad.

¿Tiene alguna idea sobre cómo obtener la instancia exacta de MethodInfo relevante para

"Action<T>.Invoke()"