2010-06-16 41 views
12

Trong khi thực thi đoạn mã sau tôi nhận được lỗi này "Các hoạt động bị ràng buộc trễ không thể thực hiện được trên các kiểu hoặc phương thức mà ContainsGenericParameters là đúng".Gọi các phương thức tĩnh có chứa các tham số chung bằng cách sử dụng Reflection

class Program 
{ 
    static void Main(string[] args) 
    { 
     MethodInfo MI = typeof(MyClass).GetMethod("TestProc"); 
     MI.MakeGenericMethod(new [] {typeof(string)}); 
     MI.Invoke(null, new [] {"Hello"}); 
    } 
} 

class MyClass 
{ 
    public static void TestProc<T>(T prefix) 
    { 
     Console.WriteLine("Hello"); 
    } 
} 

Mã trên chỉ là một phiên bản thu nhỏ của sự cố thực tế mà tôi đang gặp phải. Hãy giúp tôi.

Trả lời

22

Bạn đang gọi số MethodInfo.MakeGenericMethod nhưng bỏ đi giá trị trả lại. Giá trị trở chính nó là phương pháp mà bạn muốn Invoke:

MethodInfo genericMethod = MI.MakeGenericMethod(new[] { typeof(string) }); 
genericMethod.Invoke(null, new[] { "Hello" }); 
+0

Cảm ơn bạn đã làm việc. Tôi bỏ lỡ giá trị trả về từ MakeGenericMethod, thay vào đó tôi lấy giá trị trước đó không chứa thông tin kiểu chung. – AbrahamJP

3

Vấn đề duy nhất với các mã mà bạn gửi là:

MI.MakeGenericMethod(new [] {typeof(string)}); 

Nên

MI = MI.MakeGenericMethod(new [] {typeof(string)}); 

Bạn' không lấy một tham chiếu đến 'nướng' chung chung.

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