2017-12-18 5 views
3

매개 변수를 프로파일 링하고 분석 할 수 있도록 응용 프로그램 내에서 메서드 호출을 감사하려고합니다. 나는 C#에서 매개 변수를 전달합니다.

Run(()=> SomeFunction(paramA, paramB), paramA, paramB)); 

public static void Run(Expression<Action> action, params object[] param) 
{ 
    var func = action.Compile(); 
    func(); 
} 

public static T Run<T>(Expression<Func<T>> action, params object[] param) 
{ 
    var func = action.Compile(); 
    return func(); 
} 

그러나 나는 람다를 잃고 사용하는 방법도 쉽게 기대하고 있었는데,이 작업을 얻었다. 예를 들어,
Run(SomeFunc, paramA, paramB); 

는 여기에 도착하지만, 나는 누군가가 나를 도울 수있는 경우에, 난처한 해요 :

private T Run<T>(Func<T> subReturn) {} 
+0

'실행 '메소드에 전달하는'param'을 사용하고 있지 않습니다. 그게 의도적 인거야? – dasblinkenlight

+0

"프로필을 분석하고 매개 변수를 분석"하는 것이 무엇을 의미하는지 자세히 설명해 주시겠습니까? –

+3

몇 가지 기능이 있습니까? 그리고 매개 변수의 수/유형 측면에서 얼마나 많은 차이가 있습니까? 그러나 더 흥미로운 점은 Run (() SomeFunc (paramA, paramB))보다 Run (SomeFunc, paramA, paramB)이 더 사용하기 쉬운 이유가 무엇이라고 생각 하는가? 다른 사람들이 지적했듯이, 매개 변수를 두 번 전달할 필요가 없습니다. 이미 추출한 매개 변수를 구문 분석해야 추출 할 수 있지만 '표현식 < >'의 일부로 이미 있습니다. –

답변

3

난 당신이 정확하게 원하는 것을 이해하지 않지만, 내가 이해하는 경우 올바르게 실행하면 도움이 될 것입니다 :

private T Run<T, TLeft, TRight>(Func<TLeft, TRight, T> action, TLeft leftParam, TRight rightParam) 
{ 
    return action(leftParam, rightParam); 
} 
+3

이것은 정확합니다.'Func 를 통해'Func '에 16 개의 과부하를 추가하고'Action '을 통해'Action'을 위해 17 개 정도 더 많은 과부하를 추가하십시오. 멋진 차가운 맥주. 어느 쪽이 필요할까요. –

+0

예. Hahaha : D – rokkerboci

+2

'Func '를 사용하면 함수명 등을 포함한'Expression <>'에 의해 포착 된 정보를 잃어 버린다는 것을 의미합니다. –