func<bool> 事件和头痛
func<bool> events and a headache
我有一个布尔事件,我正在尝试分别调用每个订阅者,这样即使有一个订阅者 return 为假,我也可以 return 为假。到目前为止,我的尝试让我只剩下一个疲倦的大脑,想哭,吃一个馅饼(然后再哭一会儿)。
对于真正调用事件的函数,我一直这样做:
foreach (Delegate sub in SomeBooleanEvent.GetInvocationList())
{
someBool = sub;
//blah blah blah code blah blah blah
}
}
我得到的错误是:
CS0029: Cannot implicitly convert type 'System.Delegate' to 'bool'
我很困惑...帮助我...请...
编辑:
在终于鼓起勇气解决这个问题之后,我发现使用 func<bool>
而不是 Delegate
似乎部分有效。
但是,我现在遇到了一个新问题。当我调用事件时,只有一个订阅者是 present/called?
我终于明白是怎么回事了。
对于那些可能觉得这有用的人,应该使用 func<bool>
而不是 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;
}
这应该适用于其他类型,只要您不需要事件处理程序和事件参数。只需确保将 func 设置为适当的类型即可。此外,如果您希望触发所有事件,请确保调用它们。否则,他们将不会收到活动通知。
我有一个布尔事件,我正在尝试分别调用每个订阅者,这样即使有一个订阅者 return 为假,我也可以 return 为假。到目前为止,我的尝试让我只剩下一个疲倦的大脑,想哭,吃一个馅饼(然后再哭一会儿)。
对于真正调用事件的函数,我一直这样做:
foreach (Delegate sub in SomeBooleanEvent.GetInvocationList())
{
someBool = sub;
//blah blah blah code blah blah blah
}
}
我得到的错误是:
CS0029: Cannot implicitly convert type 'System.Delegate' to 'bool'
我很困惑...帮助我...请...
编辑:
在终于鼓起勇气解决这个问题之后,我发现使用 func<bool>
而不是 Delegate
似乎部分有效。
但是,我现在遇到了一个新问题。当我调用事件时,只有一个订阅者是 present/called?
我终于明白是怎么回事了。
对于那些可能觉得这有用的人,应该使用 func<bool>
而不是 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;
}
这应该适用于其他类型,只要您不需要事件处理程序和事件参数。只需确保将 func 设置为适当的类型即可。此外,如果您希望触发所有事件,请确保调用它们。否则,他们将不会收到活动通知。