나는 기능을 가지고 :패스 식 트리
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 대리자를 전달하는 방법. 내가 오버 헤드를 사용할 필요를 제거하기 위해 식 트리 기반의 접근 방식을 사용하고 싶었
Execute(() =>
{
channels = GetAllChannelsImpl(maxResults);
});
그러나
나는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()'메소드를 오버로딩했습니다 - 그래서 컴파일러는'Expression'을 가진 버전을'Expression'으로 preferes합니다. 이 경우가 아니라면 호출 구문은 동일 할 수 있습니다. '새로운 표현식 (() => // 등)'을 시도해 보셨습니까? 그것은 간단해야합니다. –
Jonno