Ngay bây giờ, tôi có: targetType.GetMethod("get_Item", BindingFlags.Instance)
Cách tối ưu hóa để lấy "get_Item" MethodInfo
Có điều gì tốt hơn không?
Ngay bây giờ, tôi có: targetType.GetMethod("get_Item", BindingFlags.Instance)
Cách tối ưu hóa để lấy "get_Item" MethodInfo
Có điều gì tốt hơn không?
Tôi thích sử dụng PropertyInfo.GetIndexParameters
:
var indexers = targetType.GetProperties(bindingFlags)
.Where(p => p.GetIndexParameters().Any());
.Select(p => p.GetGetMethod());
Bây giờ indexers
là một IEnumerable<MethodInfo>
của getters của indexers phù hợp với quy định được đưa ra trong BindingFlags
bindingFlags
.
Lưu ý cách mã đọc giống như trong số targetType
, nhận các thuộc tính khớp với số bindingFlags
, lấy các thuộc tính là trình lập chỉ mục và sau đó lên dự án. Nó ít bí ẩn hơn nhiều so với sử dụng chuỗi ma thuật "get_Item"
và nhiều người lập chỉ mục được xử lý dễ dàng.
Nếu bạn biết chỉ có một, bạn có thể sử dụng khóa học Single
. Nếu bạn đang tìm kiếm một trong nhiều cụ thể, bạn có thể kiểm tra kết quả của GetIndexParameters
cho phù hợp.
Cách thích hợp là truy xuất DefaultItemAttribute cho lớp. Nó có tên của thuộc tính indexer. Nó không phải là "Item", các ngôn ngữ như VB.NET cho phép xác định bất kỳ thuộc tính nào là chỉ mục. Mã của Jason cũng sẽ thất bại trên chúng, có thể có nhiều hơn một thuộc tính được lập chỉ mục. Nhưng chỉ có một mặc định.
Bạn có tài liệu nào về điều này không? Tôi không thể tìm thấy nó ở bất cứ đâu. – smartcaveman
MSDN, nhìn vào từ khóa mặc định VB.NET và lớp DefaultMemberAttribute. –
Tôi muốn MethodInfo chứ không phải PropertyInfo. – smartcaveman
@smartcaveman: Wow. 'Sử dụng PropertyInfo.GetGetMethod' trên những gì tôi đã cho bạn ở trên. – jason