【发布时间】:2024-04-23 23:00:01
【问题描述】:
我有一个布尔事件,我试图单独调用每个订阅者,这样即使一个订阅者返回 false,我也可以返回 false。到目前为止,我的尝试只剩下一个累了,想哭,吃馅饼(然后再哭)的大脑。
对于实际调用事件的函数,我一直在这样做:
foreach (Delegate sub in SomeBooleanEvent.GetInvocationList())
{
someBool = sub;
//blah blah blah code blah blah blah
}
}
我得到的错误是:
CS0029:无法将类型“System.Delegate”隐式转换为“bool”
我很困惑...帮帮我...拜托...????
编辑:
在终于鼓起勇气解决这个问题后,我发现使用func<bool> 而不是Delegate 似乎部分有效。
但是,我现在遇到了一个新问题。当我调用事件时,只有一个订阅者在场/被调用?
【问题讨论】:
-
你的错误很清楚,你不能将委托分配给
bool变量 -
SomeBooleanEvent 是如何声明的?
-
您将变量
someBool分配给实际的委托。你需要调用它来获得结果:someBool = sub();(注意括号)。 -
在 BCL(例如 System.ComponentModel.CancelEventHandler)中,需要返回状态的事件使用
EventArgs派生参数上的属性。您应该改用此模式。使用带返回值的委托类型是让您头疼的原因。它可以而且应该避免。
标签: c# events boolean iteration return-type