toma solucion resolucion problemas problema pasos para metodos matematicos matematico ejemplos decisiones .net reflection metaprogramming

.net - resolucion - solucion de problemas y toma de decisiones ejemplos



¿Hay una buena manera de obtener MethodInfo del método genérico abierto? (2)

Considera un tipo como este

public interface IHaveGenericMethod { T1 Method<T1>(T1 parm); T2 Method<T1,T2>(T1 parm); int Method2(int parm); }

¿Cómo obtengo un methodInfo para sus métodos? para un método regular no genérico, como method2, puedo ir con

typeof(IHaveGenericMethod).GetMethod("methodName",new Type[]{typeof(itsParameters)});

para un método genérico, no puedo, ya que sus parámetros no son tipos per se. Entonces, ¿cómo hago eso? Sé que puedo llamar

typeof(IHaveGenericMethod).GetMethods()

para obtener todos los métodos de ese tipo, y luego iterar sobre esa colección y hacer algunas coincidencias, pero es feo. ¿Hay una mejor manera?


Bueno, son tipos, de tipo:

foreach (var method in typeof(IHaveGenericMethod).GetMethods()) { Console.WriteLine(method.Name); if (method.IsGenericMethodDefinition) { foreach (Type type in method.GetGenericArguments()) { Console.WriteLine("> " + type.Name); } } }

Entonces puede verificar por el número de argumentos y verificar la firma. Pero nada más limpio.


Asegúrese de consultar la página de MSDN " Reflection and Generic Types ".

ya que sus parámetros no son tipos per se

En realidad, creo que es porque desea consultar los parámetros de tipo , pero la lista de tipos que puede proporcionar a GetMethod() no es para los parámetros de tipo.

Además, recuerde que todo lo que necesita para seleccionar un "grupo de métodos" de métodos genéricos es conocer la cantidad de parámetros genéricos. Entonces puedes contarlos.

luego iterar

No iterar, consultar:

var mi = from mi in typeof(IHaveGenericMethod).GetMethods() where mi.Name == "Method" where mi.IsGenericMethodDefinition where mi.GetGenericArguments().Length == 2 select mi;