2012-05-05 14 views

risposta

6

Il trucco qui sta descrivendo che si desidera che il parametro sia SomeType<T>, dove T è il tipo generico del metodo Add.

Oltre a questo, si tratta solo di utilizzare la riflessione standard, come suggerito da CastroXXL nella sua risposta.

Ecco come ho fatto:

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

Funziona. Quindi grazie –

+0

Scusate, un altro punto. Come rilevare se un tipo segue i vincoli di un tipo generico? –

+0

dare un'occhiata al debugger a 'typeof (SomeType <>). GetGenericArguments(). First(). GetGenericParameterConstraints()' e vedere il metodo 'Type.IsAssignableFrom': http://msdn.microsoft.com/it us/library/system.type.isassignablefrom.aspx Penso che combinandoli otterrai quello che vuoi – GolfWolf

Problemi correlati