c#“OR”事件委托返回bool

前端之家收集整理的这篇文章主要介绍了c#“OR”事件委托返回bool前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在XNA中为我的游戏创建了一个控制台,并且在输入命令时有一个委托.目前代表返回bool值.我在Console类中声明了一个事件(返回false),然后从其他类中订阅了这个事件.这个想法是,如果没有订阅此事件的类返回true,则假定用户输入了无效命令.但是,如果至少有一个订阅类返回true,则假定该命令有效.

目前,只有一个类被考虑用于返回true或false,有没有办法可以查看所有订阅类的返回值,然后是OR结果?

谢谢,

解决方法

在声明事件的类中,您可以检索事件的调用列表(假设类似字段的事件).单独调用每个订阅者将允许您检查每个订阅者对该事件的返回值.

例如:

public event Func<bool> MyEvent = delegate { return false; };

...     

private bool EmitMyEventAndReturnIfAnySubscriberReturnsTrue()
{
    return MyEvent.GetInvocationList()
                  .Cast<Func<bool>>()
                  .Select(method => method()) 
                  .ToList() //Warning: Has side-effects
                  .Any(ret => ret);
}

在这个例子中,每个用户都被告知事件 – 如果他们中的任何一个做出肯定的回应,就不会发生短路.如果需要,可以通过删除对ToList()的调用来轻松更改此行为.

说实话,我并不喜欢能够回归价值的事件;他们的语义对订阅者来说并不明显.如果可能的话,我会改变设计.

编辑:根据Timwi的评论强制完全执行序列的错误.

猜你在找的C#相关文章