2012-05-05 9 views

Respuesta

6

El truco aquí es describir que desea que el parámetro sea SomeType<T>, donde T es el tipo genérico del método Add.

Aparte de eso, se trata solo de usar la reflexión estándar, como CastroXXL sugirió en su respuesta.

Así es como lo hice:

var theMethodISeek = typeof(MyClass).GetMethods() 
    .Where(m => m.Name == "Add" && m.IsGenericMethodDefinition) 
    .Where(m => 
      { 
       // the generic T type 
       var typeT = m.GetGenericArguments()[0]; 

       // SomeType<T> 
       var someTypeOfT = 
        typeof(SomeType<>).MakeGenericType(new[] { typeT }); 

       return m.GetParameters().First().ParameterType == someTypeOfT; 
      }) 
    .First(); 
+0

Funciona. Así que gracias –

+0

Lo siento, otro punto. ¿Cómo detectar si un tipo sigue las restricciones de un tipo genérico? –

+0

echar un vistazo con el depurador en 'typeof (SomeType <>). GetGenericArguments(). First(). GetGenericParameterConstraints()' y ver el método 'Type.IsAssignableFrom': http://msdn.microsoft.com/en- us/library/system.type.isassignablef.aspx Creo que al combinarlos obtendrás lo que quieres – GolfWolf

Cuestiones relacionadas