2010-01-28 7 views

Antwort

5

Sie tun können, die durch alle Methoden in der Ortung Typ mit dem gleichen Rückgabetyp und der gleichen Sequenz von Typen in den Parametern:

var matchingMethods = o.GetType().GetMethods().Where(mi => 
    mi.ReturnType == gs.Method.ReturnType 
    && mi.GetParameters().Select(pi => pi.ParameterType) 
     .SequenceEqual(gs.Method.GetParameters().Select(pi => pi.ParameterType))); 
+0

das funktioniert. Ist es darüber hinaus möglich, herauszufinden, ob "gs" Delegierter von "o" ist? – Fabiano

+1

@Fabiano: ja, durch 'gs.Target':' if (gs.Target == o) {/ * gs repräsentiert eine Methode in der Instanz o * /} ' –

+0

Danke. Ich habe gerade herausgefunden, dass die zweite Antwort für meinen Fall ausreichen würde :-) – Fabiano

7
// You may want to tweak the GetMethods for private, static, etc... 
foreach (var method in o.GetType().GetMethods(BindingFlags.Public)) 
{ 
    var del = Delegate.CreateDelegate(gs.GetType(), method, false); 
    if (del != null) 
    { 
     Console.WriteLine("o has a method that matches the delegate type"); 
    } 
} 
+0

Dies scheint nicht zu funktionieren. Ist es möglich, dass Delegate.CreateDelegate nur für statische Methoden funktioniert? – Fabiano

+1

Zum Beispiel Methoden sollten Sie eine andere Signatur verwenden und den Verweis auf eine Instanz übergeben: 'Delegate.CreateDelegate (gs.GetType(), o, method, false);' – torvin

Verwandte Themen