2011-03-19 5 views
1

지금 당분간이 문제를 해결하려고 노력했지만 운이 없다 ... 내 생각은 예외 설정이 어떻게 처리되는지를 제어하는 ​​것과 같은 여러 가지 설정을 사용하는 것이었다.Func <EventHandler, args에서 속성 값 가져 오기?

내 코드 :

public class ErrorEventArgs : EventArgs 
{ 
    public bool Handled { get; set; } 
... 
... 
} 

처럼 내 메인 클래스의 속성 중 일부 : 다음 내가 취급의 값을 알 필요가의 OnError이

EventHandler<ErrorEventArgs> ErrorConfiguration {get; set;} 

,

internal void OnError(ErrorEventArgs args) 
{ 
    Func<EventHandler<ErrorEventArgs>, bool> IsHandled; 

    IsHandled = ev => ??? // invoke ErrorConfiguration? 

    if (ErrorConfiguration != null && IsHandled(ErrorConfiguration)) 
       error(this, args); 
} 

어떻게 해결할 수 있습니까?

Func이없는 EventHandler 인 경우이를 수행 할 수 있지만 부울 식을 캡슐화하려고합니다. 왜 캔트 나는 람다 ... :(

EventHandler<ErrorEventArgs> IsHandled; 
IsHandled = (sender, e) => e.ErrorContext.Handled; 
+0

I을 너의 의도를 얻지 마라. 좀 더 글로벌 샘플을 제공 할 수 있습니까? 이벤트 처리기가 이미 처리 된 이벤트를 건너 뛸 수있게 하시겠습니까? – Zebi

답변

2

를 체인 당신이 정확히 무엇을 달성하고자하는 완전히 확실하지 오전하지만 같은 것을 수행 할 수 있습니다.

IsHandled = ev => { ev(this, args); return args.Handled; }; 

을 비록 I 당신은 정말 당신의 단지 북동를 호출하는 모든 람다 필요하지 않습니다이 같은 빠르고, 청소기, 또는 아무것도 더 읽을 모르겠습니다. 난 그냥

if (ErrorConfiguration != null) ErrorConfiguration(this, args); 
if (!args.Handled) error(this, args); 
+0

Excellent ... 고마워요. 정확히 내가 필요한 것. – Janus007

1

같은 것을 함께 갈 것 에드 직접 위임 호출 :

internal void OnError(ErrorEventArgs args) 
{ 
    if (ErrorConfiguration != null) 
     ErrorConfiguration(this, args); 

    if (args.Handled) 
     error(this, args); 
} 

당신이 사용 람다에서 같은 일을하려면, 당신은 코드의 줄 이상 걸릴 것이다, 여기에 수행해야합니다 :

internal void OnError(ErrorEventArgs args) { 
Func<EventHandler<ErrorEventArgs>, bool> IsHandled; 

    IsHandled = ev => { 
     ErrorConfiguration(this, ev); 
     return ev.Handled; 
    }; 

    if (ErrorConfiguration != null && IsHandled(ErrorConfiguration)) 
     error(this, args); 
} 
+0

나는 그 사람도 좋아한다. .. 당신의 모든 도움에 감사드립니다. – Janus007