2011-03-19 74 views
1

已經嘗試解決這個很長一段時間了,但沒有運氣......我的想法是有不同的設置的配置,例如..控制如何處理異常。Func <EventHandler,從args獲取屬性值?

我的一些代碼:)

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

在我的主類的屬性,如:

EventHandler<ErrorEventArgs> ErrorConfiguration {get; set;} 

然後我有一個地方的OnError我需要知道所處理的值,

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

我不要收到你的意願。你能提供一個更全球化的樣本嗎?你希望你的事件處理程序能夠跳過已處理的事件嗎? – Zebi 2011-03-19 13:21:52

回答

2

我不完全確定你想要什麼來實現的,究竟但你可以類似:

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

即使我我不知道這是更可讀,更快,更乾淨,或類似的東西。我只想去像

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

非常好......謝謝:),正是我所需要的。 – Janus007 2011-03-19 18:36:58

1

你真的不需要任何lambda來呼叫你剛剛編輯打電話給你的委託直接:

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

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

如果你想使用在一個lambda同樣的事情,你必須做這個,這將需要更多的代碼:

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 2011-03-20 09:55:25