2012-05-05 12 views

Odpowiedz

6

Podejście polega na tym, że parametr ma być SomeType<T>, gdzie T jest typem ogólnym metody Add.

Poza tym chodzi tylko o standardowe odbicie, jak zasugerował CastroXXL w swojej odpowiedzi.

Oto jak to zrobiłem:

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

To działa. Dziękuję –

+0

Przepraszam, kolejny punkt. Jak wykryć, czy typ podąża za typowymi ograniczeniami? –

+0

zaglądnij z debuggerem pod 'typeof (SomeType <>) .GenergeGenericArguments(). First(). GetGenericParameterConstraints()' i zobacz metodę 'Type.IsAssignableFrom': http://msdn.microsoft.com/en- us/library/system.type.isassignablefrom.aspx Myślę, że łączenie ich da ci to, czego chcesz – GolfWolf

Powiązane problemy