2013-05-28 14 views
5

I Have hai chức năng:Type.GetMethod với một tình trạng quá tải Generic - Nhận Generic MethodInfo mà không lặp qua tất cả các phương pháp

  1. public void DeleteRecord(int id);
  2. public T DeleteRecord<T>(int id);

Dưới đây là cách tôi cố gắng để tự động gọi chung phương pháp:

MethodInfo method = typeof(DAL).GetMethod("DeleteRecord", new[] { typeof(int) }); 
MethodInfo generic = method.MakeGenericMethod(returnType); 
object o = generic.Invoke(null, new object[] { dbname, spname, expandoAsDictionary }); 

Dòng đầu tiên t một ngoại lệ bởi vì nó tìm thấy một định nghĩa mơ hồ. Có cách nào tôi có thể nhận được MethodInfo của phương pháp chung mà không sử dụng GetMethods và lặp qua các kết quả yêu cầu IsGenericMethod?

Chỉnh sửa: Vui lòng xóa 'Trùng lặp' vì cả hai câu trả lời được đề xuất đều giải quyết vấn đề này bằng vòng lặp bên trong (GetMethods(). Chọn ...) hoặc thậm chí không xử lý quá tải.

+0

Đây không phải là bản sao. tôi đã biết làm thế nào để gọi một phương pháp chung với sự phản ánh nhưng tôi có một ngoại lệ định nghĩa mơ hồ. Vui lòng đọc câu hỏi của tôi. –

+0

nó là một bản sao, nhưng tôi liên kết câu hỏi sai, xin lỗi ... đây là một trong những chính xác: http://stackoverflow.com/q/5218395/201088. –

+1

vẫn không bị lừa đảo! tôi đã yêu cầu làm thế nào để làm điều đó mà không cần sử dụng hàm GetMethods(). câu trả lời được đánh dấu trong liên kết của bạn đang sử dụng nó ... –

Trả lời

0

Có lẽ không phải là giải pháp chính xác cho vấn đề của bạn, nhưng có lẽ bạn có thể hài lòng với giải pháp này:

var generic = typeof(BadFoo).GetMethods().FirstOrDefault(p => p.IsStatic == true && p.Name == "DeleteRecord" && p.ReturnType == typeof(Int32)); 

Tôi nghĩ sẽ có giống như một "FullName" cho phương pháp, vì vậy GetMethod() có thể là Calles với một tên đầy đủ để có được phương pháp duy nhất. Nhưng không có Thuộc tính nào khác trong Phương thức hơn Tên.

+0

Vui lòng đọc câu hỏi của tôi. Tôi hỏi làm thế nào để làm điều này mà không GetMethods() :) –

+0

Như tôi đã nói, đây không phải là giải pháp chính xác. Nhưng ít nhất bạn sẽ không "looping qua các kết quả" –

+0

Cảm ơn câu trả lời của bạn, tôi sẽ xem xét việc sử dụng nó ... Tôi đang tìm một cách để phân biệt giữa các phương pháp trên một mức độ cao hơn như giải pháp của bạn vẫn có một vòng lặp phía sau hậu trường (FirstOrDefault) –