2010-01-28 32 views

Trả lời

5

Bạn có thể làm điều đó bằng cách định vị tất cả các phương pháp trong loại có cùng loại trả về và cùng một chuỗi loại trong tham số:

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

hoạt động này. Ngoài ra, có thể tìm hiểu xem 'gs' có phải là đại biểu của 'o' không? – Fabiano

+1

@Fabiano: vâng, thông qua 'gs.Target':' if (gs.Target == o) {/ * gs đại diện cho một phương thức trong cá thể o * /} ' –

+0

Cảm ơn. Tôi vừa phát hiện ra rằng câu trả lời thứ hai sẽ là đủ cho trường hợp của tôi :-) – 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

Điều này dường như không hoạt động. Có thể Delegate.CreateDelegate chỉ hoạt động cho các phương thức tĩnh không? – Fabiano

+1

Ví dụ các phương thức bạn nên sử dụng một chữ ký khác, chuyển tham chiếu đến một cá thể: 'Delegate.CreateDelegate (gs.GetType(), o, method, false);' – torvin

Các vấn đề liên quan