Ngoài ra nếu bạn biết phương pháp tĩnh của bạn và được tiếp cận với nó tại một thời điểm biên dịch, bạn có thể sử dụng Expression
lớp để có được MethodInfo
mà không trực tiếp sử dụng phản ánh (có thể gây ra lỗi thời gian chạy bổ sung):
public static void Main()
{
MethodInfo staticMethodInfo = GetMethodInfo(() => SampleStaticMethod(0, null));
Console.WriteLine(staticMethodInfo.ToString());
}
//Method that is used to get MethodInfo from an expression with a static method call
public static MethodInfo GetMethodInfo(Expression<Action> expression)
{
var member = expression.Body as MethodCallExpression;
if (member != null)
return member.Method;
throw new ArgumentException("Expression is not a method", "expression");
}
public static string SampleStaticMethod(int a, string b)
{
return a.ToString() + b.ToLower();
}
Thông số thực tế này được chuyển đến một số SampleStaticMethod
không quan trọng vì chỉ có nội dung là SampleStaticMethod
được sử dụng, vì vậy bạn có thể vượt qua null
và các giá trị mặc định cho nó.
Nguồn
2014-01-11 08:04:05
Trong trường hợp đó tôi nhận được 0 phương thức trở lại ... Có vấn đề gì nếu tôi chạy nó từ cùng một lớp hoặc từ phương thức chính? – Urik
Cập nhật ... để có được tất cả các phương pháp, cả tĩnh lẫn ví dụ, công khai và phi công cộng –
Giống như một sự quyến rũ! Cảm ơn! – Urik