Tôi cần kiểm tra sự bình đẳng giữa hai MethodInfos. Chúng thực sự là cùng một MethodInfo giống với ngoại lệ của ReflectedType (có nghĩa là, DeclaringType giống nhau và các phương thức thực sự nên có cùng một phần thân). Có một số cách để làm điều này, nhưng tôi đang tìm kiếm hiệu quả nhất.Phương thức EquInfo để khai báo Loại
Ngay bây giờ tôi có:
public static bool AreMethodsEqualForDeclaringType(this MethodInfo first, MethodInfo second)
{
first = first.ReflectedType == first.DeclaringType ? first : first.DeclaringType.GetMethod(first.Name, first.GetParameters().Select(p => p.ParameterType).ToArray());
second = second.ReflectedType == second.DeclaringType ? second : second.DeclaringType.GetMethod(second.Name, second.GetParameters().Select(p => p.ParameterType).ToArray());
return first == second;
}
Đây là loại đắt tiền, vì vậy tôi tự hỏi nếu có một cách tốt hơn ...
Tôi có nên so sánh hai cơ quan phương pháp để thay thế? ví dụ.
first.GetMethodBody() == second.GetMethodBody()
Cảm ơn.
Tại sao không thể bạn chỉ cần so sánh các loại tuyên bố trực tiếp mà không so sánh hem cho các loại phản ánh? Tôi cũng thích biết tại sao bạn cần phải như vậy. – jgauffin
Chắc chắn chỉ có thể so sánh các loại khai báo, nhưng nó đắt hơn vì yêu cầu gọi GetParameters(), trong khi, nếu các ReflectedTypes bằng nhau, tôi chỉ có thể thực hiện kiểm tra bình đẳng thông thường. – Jeff
Tôi cần làm điều này vì tôi có các lớp Proxy được tạo bởi EntityFramework khi chạy mà tôi đang thực hiện một số phản ánh. – Jeff