这是我的问题的上下文:
一种常见的技术是将方法的参数声明为 Lambda 表达式而不是委托。这样该方法就可以检查表达式来做一些有趣的事情,比如找出委托实例主体中方法调用的名称。
问题是您失去了 Resharper 的一些智能感知功能。如果方法的参数被声明为委托,Resharper 会在编写对该方法的调用时提供帮助,提示您使用 x => x 语法作为参数值提供给该方法。
所以......回到我的问题,我想做以下事情:
MethodThatTakesDelegate(s => s.Length);
}
private void MethodThatTakesDelegate(Func<string, object> func)
{
//convert func into expression
//Expression<Func<string, object>> expr = "code I need to write"
MethodThatTakesExpression(expr);
}
private void MethodThatTakesExpression(Expression<Func<string, object>> expr)
{
//code here to determine the name of the property called against string (ie the Length)
}