现在尝试解决这个问题很长一段时间,但没有运气......我的想法是为不同的设置设置某种配置,例如..控制异常的处理方式。
我的一些代码:)
public class ErrorEventArgs : EventArgs
{
public bool Handled { get; set; }
...
...
}
我的主要类中的属性,如:
EventHandler<ErrorEventArgs> ErrorConfiguration {get; set;}
然后我有一个OnError,我需要知道Handled的值,
internal void OnError(ErrorEventArgs args)
{
Func<EventHandler<ErrorEventArgs>, bool> IsHandled;
IsHandled = ev => ??? // invoke ErrorConfiguration?
if (ErrorConfiguration != null && IsHandled(ErrorConfiguration ))
error(this, args);
}
如何解决这个问题?
我可以这样做,如果它是没有Func的EventHandler,但我想封装布尔表达式。为什么我不能把lambda链起来...... :(
EventHandler<ErrorEventArgs> IsHandled;
IsHandled = (sender, e) => e.ErrorContext.Handled;
答案 0 :(得分:2)
我并不完全确定你想要达到的目标。但你可以做类似的事情:
IsHandled = ev => { ev(this, args); return args.Handled; };
即使我不确定这是否更具可读性,更快,更清洁,或类似的东西。我会选择像
这样的东西if (ErrorConfiguration != null) ErrorConfiguration(this, args);
if (!args.Handled) error(this, args);
答案 1 :(得分: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);
}