Tôi có một MethodInfo
của GenericMethodDefinition. Chẳng hạn như: CallMethod<T>(T arg, string arg2)
. Phương thức GetParameters() sẽ cho tôi hai đối tượng ParameterInfo, cái đầu tiên trong số đó là generic, cái thứ hai không phải là. Làm thế nào tôi có thể nhận được ParameterInfo để cho tôi biết nó là chung? Điều gì về nếu nó có khó khăn?Cách xác định xem ParameterInfo có thuộc loại chung không?
Trả lời
Kiểm tra ParameterType.IsGenericParameter
.
Bạn cũng có thể muốn kiểm tra ContainsGenericParameters
, điều này sẽ đúng đối với một số nội dung như MyMethod<T>(List<T> param)
. (Mặc dù List<>
không phải là một tham số chung)
Nếu IsGenericParameter
là đúng, bạn cũng có thể gọi GetGenericParameterConstraints()
để có được giao diện hoặc loại cơ sở ràng buộc, và bạn có thể kiểm tra GenericParameterAttributes
(một enum [Flags]
) cho new()
, struct
, hoặc class
ràng buộc.
những hạn chế về tham số chung? – smartcaveman
Trong trường hợp 'args' là một mảng' T [] ', ta có thể sử dụng' ParameterType.IsArray' và 'ParameterType.ContainsGenericParameter'. – user492238
lẽ here bạn sẽ tìm thấy thông tin về phản ánh các thông số chung chung ...
Tôi nghĩ rằng bạn đang tìm kiếm những:
parameterInfo.ParameterType.ContainsGenericParameters
parameterInfo.ParameterType.GetGenericParameterConstraints()
Trong bổ sung cho câu trả lời của người khác cho câu hỏi thứ hai: Có thể chúng tôi có được các ràng buộc từ ParameterInfo
sử dụng GetGenericParameterConstraints()
, nhưng nó không hoạt động trong mọi trường hợp. Hãy xem xét một số phương pháp chung chung như sau:
public static void MyMethod<T,V>() where T : Dictionary<int, int>
{
}
Có một ràng buộc cho phương pháp này, nhưng phương pháp không có tham số (suy nghĩ về Enumerable.Cast). Những gì tôi sẽ nói là ràng buộc không phải là một phần của các tham số, mà là chính phương thức đó. Chúng tôi có thể nhận được các ràng buộc bằng cách:
method.GetGenericArguments()[0].BaseType //the constraint of T
method.GetGenericArguments()[1].BaseType //that of V: Object
- 1. C# xác định loại chung
- 2. Xác định xem thuộc tính có phải là loại mảng không bằng cách phản ánh
- 3. Đối tượng động - Cách xác định xem thuộc tính có được xác định không?
- 4. Kiểm tra xem hai loại chung có bằng nhau không
- 5. Xác định loại chung loại thời gian chạy
- 6. Làm thế nào để xác định xem T là một loại giá trị hoặc lớp tham chiếu trong chung chung?
- 7. Xác định xem bộ sưu tập có thuộc loại IEnumerable <T>
- 8. không thể đọc thuộc tính 'Xem' không xác định
- 9. Xác định xem loại là điển
- 10. Xác định xem loại có phải là số
- 11. Cách xác định xem địa chỉ IP có thuộc về một quốc gia hay không
- 12. Cách xác định xem đối tượng JavaScript gốc có thuộc tính/phương thức không?
- 13. Cách xác minh xem một đối tượng có thuộc tính nhất định không?
- 14. Xác định xem một thuộc tính JavaScript có định nghĩa getter hoặc setter không?
- 15. Cách sắp xếp loại danh sách chung chung nếu có nhiều thuộc tính?
- 16. Cách xác định xem GraphicsEnvironment có tồn tại hay không
- 17. Cách xác định xem NSString có trống không
- 18. Cách xác định xem CKEditor có được tải không?
- 19. Các loại thô với các phương pháp chung không phụ thuộc vào loại chung
- 20. Có cách nào trong F # để loại-kiểm tra đối với một loại chung chung mà không chỉ định loại cá thể không?
- 21. Mẫu C++: cách xác định xem loại có phù hợp với phân lớp
- 22. Xác định xem thuộc tính phản ánh có thể được gán không
- 23. Xác định phương pháp chung
- 24. Xác định ràng buộc loại giao diện chung cho giá trị và loại tham chiếu
- 25. Java: Cách kiểm tra xem Trường có thuộc loại java.util.Collection
- 26. Mặc định cho loại chung?
- 27. Cách tốt nhất để xác định xem thuộc tính XML có tồn tại trong Flex
- 28. Cách xác định xem một loại có thực hiện giao diện với C# reflection
- 29. Xác định xem $ sth có hàng không tiêu thụ không?
- 30. Xcode ios Tên loại không xác định?
nhờ các mod để tạo thẻ parameterinfo – smartcaveman