我有一个功能:
public void Execute(Expression<Action> expression)
{
var time = expression.Compile().Benchmark();
var msg = string.Format("{0} took {1} to complete",
ReflectionHelper.GetComponentCallDetails().ToString(),
time.ToString(@"hh\:mm\:ss\.ff"));
Logger.Info(msg);
}
需要调用的委托类似于:
channels = GetAllChannelsImpl(maxResults);
我对表达式树比较陌生,无法找到将 Action 委托传递给该方法的方法。
我能够使用
public void Execute(Action action)
{
var time = action.Benchmark();
var msg = string.Format("{0} took {1} to complete",
ReflectionHelper.GetComponentCallDetails().ToString(),
time.ToString(@"hh\:mm\:ss\.ff"));
Logger.Info(msg);
}
并调用
Execute(() =>
{
channels = GetAllChannelsImpl(maxResults);
});
但我想使用基于表达式树的方法,以消除使用反射的开销来找出调用来记录它的方法的细节的需要。
谁能建议将上述动作委托的表达式树作为方法参数传递的正确方法。