我有一种情况,多个类正在注册与另一个类的兴趣,观察某个属性的值。这是正在使用委托像这样做:C#检查委托/ func是否有一个有效的接收器
public delegate void ObservingHandler (object value);
Dictionary<ObservingHandler, ObservationInfo> _handlers = new Dictionary<ObservationHandler, ObservationInfo>();
public void register(ObservingHandler handler) {
// Observation info is created here and is just a struct
_handlers.Add(handler, info);
}
这个伟大的工程,是真正有用的,但目前在已注册的对象被释放它告诉相关的类,它不再想收到通知。否则,我会得到NULL引用异常。
目前这意味着我不能使用lambda表达式,因为观察处理程序是字典中的键(因此在删除它时需要是相同的实例)。
我想要做的是检查每个ObservationHandler
在它被调用之前是否有一个有效的实例化类。这样一来,责任就从听课中消失了。
有没有办法在Func
或delegate
检查接收器的功能是否还活着?
编辑:
完整的源代码来自我的项目叫SFCore on GitHub。
“否则我得到excetpions” - 什么例外?这不太清楚你的意思 - 请展示一个证明问题的[mcve]。 –
'ObservingHandler'是对观测类中方法的引用。如果observing类被释放,那么'ObservingHandler'包含一个对null类中方法的引用。我相信这个异常是一个空引用异常。所以现在我必须让观测类在发布前取消注册,但是我希望能够判断ObservingHandler是否有一个实例化的观察者。 –
而不是“相信”异常是一个NullReferenceException,为什么不向我们展示一个例子?我期望ObservingHandler引用可以自动保持目标活动 - 这里没有“发布”。基本上,直到你能够以简明的形式重现问题,要帮助你将会非常困难。 –