Type.GetMethod returns 始终为空
Type.GetMethod returns always null
我想从调用方法中获取一个 MethodInfo 对象以确定该方法上是否设置了特殊属性。
调用方法运行()
的程序class
class Program
{
private static RestHandler _handler = new RestHandler();
static void Main(string[] args)
{
Run();
}
[Rest("GET")]
static void Run()
{
_handler.Handler(typeof(Program));
}
}
Class我想确定自定义属性
public class RestHandler
{
public void Handler(Type t)
{
StackFrame frame = new StackFrame(1);
var method = frame.GetMethod();
MethodInfo methodInfo = t.GetMethod(method.Name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
var attributes = methodInfo.GetCustomAttributes<RestAttribute>();
}
}
属性class
public class RestAttribute : Attribute
{
public RestAttribute(string method)
{
Method = method;
}
public string Method { get; set; }
}
我的问题是 MethodInfo 对象 (methodInfo
) 始终为 null,即使堆栈帧中的方法对象已正确设置。
属性 method.Name
returns 调用方法的正确名称。
为什么 methodInfo
对象总是空的?
这是一个私有方法:
static void Run()
添加BindingFlags.NonPublic以通过反射访问它
MethodInfo methodInfo = t.GetMethod(method.Name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
我想从调用方法中获取一个 MethodInfo 对象以确定该方法上是否设置了特殊属性。
调用方法运行()
的程序classclass Program
{
private static RestHandler _handler = new RestHandler();
static void Main(string[] args)
{
Run();
}
[Rest("GET")]
static void Run()
{
_handler.Handler(typeof(Program));
}
}
Class我想确定自定义属性
public class RestHandler
{
public void Handler(Type t)
{
StackFrame frame = new StackFrame(1);
var method = frame.GetMethod();
MethodInfo methodInfo = t.GetMethod(method.Name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
var attributes = methodInfo.GetCustomAttributes<RestAttribute>();
}
}
属性class
public class RestAttribute : Attribute
{
public RestAttribute(string method)
{
Method = method;
}
public string Method { get; set; }
}
我的问题是 MethodInfo 对象 (methodInfo
) 始终为 null,即使堆栈帧中的方法对象已正确设置。
属性 method.Name
returns 调用方法的正确名称。
为什么 methodInfo
对象总是空的?
这是一个私有方法:
static void Run()
添加BindingFlags.NonPublic以通过反射访问它
MethodInfo methodInfo = t.GetMethod(method.Name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);