2012-05-05 14 views

Antwort

6

Der Trick hier ist die Beschreibung, dass der Parameter SomeType<T> sein soll, wobei T der generische Typ der Add Methode ist.

Ansonsten geht es nur um Standardreflexion, wie CastroXXL in seiner Antwort vorgeschlagen hat.

Hier ist, wie ich es tat:

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

Es funktioniert. Also danke –

+0

Sorry, ein weiterer Punkt. Wie erkennt man, ob ein Typ den Beschränkungen eines generischen Typs folgt? –

+0

Werfen Sie einen Blick auf den Debugger bei 'typeof (SomeType <>). GetGenericArguments(). First(). GetGenericParameterConstraints()' und sehen Sie die 'Type.IsAssignableFrom' Methode: http://msdn.microsoft.com/en- us/library/system.type.isassignablefrom.aspx Ich denke, wenn man sie kombiniert, bekommt man, was man will – GolfWolf

Verwandte Themen