获取 lambda 表达式的 MethodInfo
本文关键字:MethodInfo 表达式 lambda 获取 | 更新日期: 2023-09-27 18:36:16
我知道我在问奇怪的问题,但只是为了踢,是否有可能获得 lambda 表达式的MethodInfo
?
我追求这样的事情:
(Func<int, string>(i => i.ToString())).MethodInfo
更新无论 lamda 的主体是否是方法调用表达式,我都想获取方法信息,即无论 lambda 的主体是什么类型的表达式。
因此,例如
这可能会起作用。
var intExpression = Expression.Constant(2);
Expression<Func<int, Dog>> conversionExpression = i => Program.GetNewDog(i);
var convertExpression5 = Expression.ConvertChecked(intExpression, typeof(Dog), ((MethodCallExpression)(conversionExpression.Body)).Method);
class Program
{
static Dog GetNewDog(int i)
{
return new Dog();
}
}
但我希望即使这样也能工作:
var intExpression = Expression.Constant(2);
Expression<Func<int, Dog>> conversionExpression = i => new Dog();
var convertExpression5 = Expression.ConvertChecked(intExpression, typeof(Dog), /*...???... */);
你很接近:)
你可以做这样的事情:
MethodInfo meth = (new Func<int, string>(i => i.ToString())).Method;
注意:如果您有多个委托实例的"订阅者",则可能会出现问题。
参考: https://learn.microsoft.com/en-us/dotnet/api/system.delegate.method
使用 System.Linq.Expressions
命名空间,可以执行以下操作。
Expression<Func<int, string>> expression = i => i.ToString();
MethodInfo method = ((MethodCallExpression)expression.Body).Method;