에서 매개 변수를 로그에? 예, 당신이 할 수있는방법 다음 코드를 감안할 때 일반적인 기능
1
A
답변
1
을 :
"1, 2, 푸 :"그래서 출력은 같은 것을 읽을 것입니다. 표현 트리 사용. 그러나 모든 경우 (LINQ와 같은 연쇄 된 호출 등)는 다루지 않습니다. 항상 그러한 경우를 포함하도록 배치 될 수 있지만,이 방법은 쓰레기의 거대한 더미가 될 것이다 :
푸 :
class Program { static void Main(string[] args) { int result = Execute(() => Foo(1, 2)); } public static int Foo(int x, int y) { return x + y; } public static T Execute<T>(Expression<Func<T>> function) { var call = function.Body as MethodCallExpression; var values = new List<object>(); var obj = call.Object == null ? null : Expression.Lambda(call.Object).Compile().DynamicInvoke(); foreach (var arg in call.Arguments) { var value = Expression.Lambda(arg).Compile().DynamicInvoke(); values.Add(value); } LogMethodCall(call.Method.Name, values); return (T)call.Method.Invoke(obj, values.ToArray()); } public static void LogMethodCall(string methodName, IEnumerable<object> args) { Console.WriteLine("{0}: {1}", methodName, string.Join(",",args.Select(x=> x.ToString()))); } }
그것은 인쇄됩니다 1,2
당신에게 이 예제에서 invokation의 출력과 객체를 기록 할 수도 있습니다.
+0
정말 도움이됩니다. 고마워요. 이런 식을 사용하여 스스로를 교육해야합니다. 실적에 대한 우려가 있습니까? 또는 컴파일러는 LINQ를 본질적으로 평가합니까? – maxmoore14
+0
성능이 좋지 않습니다. 그것을 다루거나 명시 적으로 로깅을 작성하십시오. – eocron
관련 문제
- 1. 다음 코드를 감안할 때
- 2. -Wundef는 다음 코드를 감안할 때
- 3. 다음 XML 코드를 감안할 때
- 4. 다음 코드를 감안할 때 Ramda
- 5. C++ 함수 포인터 다음 코드를 감안할 때
- 6. 다음 코드를 감안할 때 동적 메모리 할당
- 7. 스레드 및 다음 코드를 감안할 때 문제
- 8. 언제 다음 코드를 감안할 때 WPF
- 9. 원격 데이터는 다음 코드를 감안할 때 그리드
- 10. 간단한 Gson.fromJson의 예는 다음 코드를 감안할 때
- 11. 코드 기다린 다음 코드를 감안할 때 펄스
- 12. jChart2D - 다음 코드를 감안할 때 TracePoint2D
- 13. 어떻게 깊은 특성 다음 코드를 감안할 때
- 14. monodroid TimeSpan.Total * 속성은 다음 코드를 감안할 때
- 15. 다음 코드를 감안할 때 사이클 해제 솔루션
- 16. 비주얼 C++ 다음 코드를 감안할 때
- 17. 포인터 캐스팅 다음 코드를 감안할 때 C
- 18. 다음 감안할 때 XML
- 19. 다음 감안할 때 분산
- 20. 다음 테이블을 감안할 때
- 21. 다음 감안할 때 lxml이
- 22. 순회는이 코드를 감안할 때
- 23. 이 코드를 감안할 때
- 24. 다음 표를 감안할 때 그룹
- 25. 다음 XML을 감안할 때 XSD
- 26. 다음 감안할 때 문자열 위치
- 27. 스팍이 인터페이스 다음 감안할 때
- 28. 최선의 방법 코드를 감안할 때 C#을
- 29. 크로스 모듈 기능 범위? 어디 다음 감안할 때
- 30. 다음 코드 감안할 때 스칼라
짧은 대답 : 아니오 – rokkerboci
답변 : 예. 이는 "aspect 지향 프레임 워크"를 통해 달성 할 수 있습니다. 이 솔루션에는 메서드의 특성 표시를 통한 코드 주입이 포함됩니다. 표현식 트리를 사용하는 또 다른 접근법 : (표현식 > 표현식)을 실행하고 입력 매개 변수를 추출하기 위해 직접 구문 분석하십시오. 이 솔루션은 외부 프레임 워크를 포함하지 않지만 모든 함수 호출을 완전히 포함하지는 않습니다. –
eocron
그들을 사용하는 함수 (즉, Foo 내부)에 로그합니까? –