C# func<;布尔>;事件和头痛

C# func<;布尔>;事件和头痛,c#,events,boolean,iteration,return-type,C#,Events,Boolean,Iteration,Return Type,我有一个布尔事件,我试图单独调用每个订户,这样即使有一个订户返回false,我也可以返回false。到目前为止,我的尝试只给我留下了一个疲惫的大脑,想哭,吃一个炸馅饼(然后再哭) 对于实际调用事件的函数,我一直在这样做: foreach (Delegate sub in SomeBooleanEvent.GetInvocationList()) { someBool = sub; //blah blah

我有一个布尔事件,我试图单独调用每个订户,这样即使有一个订户返回false,我也可以返回false。到目前为止,我的尝试只给我留下了一个疲惫的大脑,想哭,吃一个炸馅饼(然后再哭)

对于实际调用事件的函数,我一直在这样做:

foreach (Delegate sub in SomeBooleanEvent.GetInvocationList())
             {
                 someBool = sub;
                 //blah blah blah code blah blah blah
                 }
             }
我得到的错误是:

CS0029:无法将类型“System.Delegate”隐式转换为“bool”


我很困惑…帮帮我…请…我终于明白发生了什么事。 对于那些可能认为这很有用的人,应该使用
func
而不是
Delegate
(我在上次编辑之前编写的代码没有调用订阅服务器,因为我意外删除了一个会调用每个方法的代码块)

简单地做

public event Func<bool> onAWildBooleanEvent;

public bool? AWildBooleanEVent(){
            bool? result = null;
            if(daBool!=null){
                foreach (Func<bool> sub in onAWildBooleanEvent.GetInvocationList())
                {
                    if(result == null){
                        result = sub();
                    }else{
                        if(sub()!=result){
                            result= false;
                        }
                    }

                }
                return AoNBool;
            }
            return null;
        }  
公共事件函数;booleanEvent;
公共场所?AWildBooleanEVent(){
bool?结果=null;
if(daBool!=null){
foreach(onAWildBooleanEvent.GetInvocationList()中的Func子函数)
{
如果(结果==null){
结果=sub();
}否则{
如果(sub()!=结果){
结果=假;
}
}
}
返回AoNBool;
}
返回null;
}  

只要不需要事件处理程序和事件参数,这也适用于其他类型。只需确保将func设置为适当的类型即可。此外,如果希望触发所有事件,请确保调用它们。否则,他们将不会收到事件通知。

您的错误非常清楚,您无法将委托分配给
bool
variable SomeBooleanEvent是如何声明的?您正在将变量
someBool
分配给实际的委托。您需要调用它以获得结果:
someBool=sub()(注意括号)。在BCL中(例如),需要返回状态的事件使用
EventArgs
-派生参数上的属性。您应该改用这种模式。使用带有返回值的委托类型是导致您头痛的原因;它可以而且应该避免。