2010-07-05 3 views
1

합니다. 이 코드는 작동하지 않는다 :추가 이벤트 핸들러와 표현 나무

Expression<Func<EventHandler<TEventArgs>>> handler =() => GenericEvent; 
var vs = Expression.Parameter(typeof(EventHandler<TEventArgs>), "vs");  
var adder = Expression.Lambda<Action<EventHandler<TEventArgs>>>(
      Expression.AddAssign(handler.Body, vs), vs).Compile(); 

오류 메시지 :

이진 연산자 AddAssign는 타입 '은 System.EventHandler 1[ConsoleApplication.Program+SomeEventArgs]' and 'System.EventHandler 1 ConsoleApplication.Program SomeEventArgs +]에 정의되어 있지 않습니다.

답변

3

시작하려면 이벤트와 위임 필드의 차이점을 명심해야합니다.

우리는 GenericEvent는 첫 번째 경우에 무엇인지 말할 수는 없지만, 정말 이벤트를 참조 않는 경우, 즉 add_GenericEvent 또는 적합한 기본 메타 데이터를 제공 무엇을 호출 될 것입니다. 두 번째 경우와 비교해보십시오. 실제로 Delegate.Combine에 전화를 걸고 결과를 EventHandler<TEventArgs>으로 다시 입력 한 다음 GenericEvent에 다시 할당하십시오. 두 경우 모두 C# 컴파일러는 구문 식 설탕을 사용하고 있습니다. 해당 설탕 트리를 만들려면 설탕을 꺼내야합니다.

+0

그럼 최종 코드는 어떻게 생겼을까요? – l33t

+0

@ l33t : 더 명확한 질문이 없으면 적절한 코드를 작성하기가 어렵습니다. 비슷한 위치에 있지만 제대로 작동하지 않으면 [mcve]를 사용하여 새 질문을하십시오. –