我知道我问的是奇怪但只是为了踢,是否有可能获得MethodInfo
的lambda表达式?
我喜欢这样的事情:
(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), /*...???... */);
答案 0 :(得分:7)
你非常接近:)
您可以这样做:
MethodInfo meth = (new Func<int, string>(i => i.ToString())).Method;
注意:如果您有多个订阅者,则可能会遇到问题&#39;到委托实例。
MSDN:http://msdn2.microsoft.com/en-us/library/system.delegate.method
答案 1 :(得分:3)
使用System.Linq.Expressions
命名空间,您可以执行以下操作。
Expression<Func<int, string>> expression = i => i.ToString();
MethodInfo method = ((MethodCallExpression)expression.Body).Method;