如何从方法符号中获取MethodInfo
本文关键字:获取 MethodInfo 符号 方法 | 更新日期: 2023-09-27 18:25:53
是否可以从方法符号中获取MethodInfo对象?
因此,与相同
typeof(SomeClassSymbol) // this gets you a Type object
以下是我想做的:
public class Meatwad
{
MethodInfo method;
public Meatwad()
{
method = ReflectionThingy.GetMethodInfo(SomeMethod);
}
public void SomeMethod() { }
}
如何实现ReflectionThingy.GetMethodInfo?假设这是可能的,那么重载方法呢?
委托在其Method
属性中包含所需的MethodInfo
。所以你的辅助方法可以很简单:
MethodInfo GetMethodInfo(Delegate d)
{
return d.Method;
}
不能直接从方法组转换为Delegate
。但你可以用石膏。例如:
GetMethodInfo((Action)Console.WriteLine)
请注意,如果您尝试将其与usr的解决方案混合使用,这将不起作用。例如
GetMethodInfo((Action)(() => Console.WriteLine()))
将返回生成的匿名方法的MethodInfo
,而不是Console.WriteLine()
。
这在C#中是不可能的。但你可以自己构建:
static MemberInfo MemberInfoCore(Expression body, ParameterExpression param)
{
if (body.NodeType == ExpressionType.MemberAccess)
{
var bodyMemberAccess = (MemberExpression)body;
return bodyMemberAccess.Member;
}
else if (body.NodeType == ExpressionType.Call)
{
var bodyMemberAccess = (MethodCallExpression)body;
return bodyMemberAccess.Method;
}
else throw new NotSupportedException();
}
public static MemberInfo MemberInfo<T1>(Expression<Func<T1>> memberSelectionExpression)
{
if (memberSelectionExpression == null) throw new ArgumentNullException("memberSelectionExpression");
return MemberInfoCore(memberSelectionExpression.Body, null/*param*/);
}
并像这样使用:
var methName = MemberInfo(() => SomeMethod()).MethodName;
这将为您提供编译时间安全性。不过表现不会很好。