我有一種情況,多個類正在註冊與另一個類的興趣,觀察某個屬性的值。這是正在使用委託像這樣做: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引用可以自動保持目標活動 - 這裏沒有「發佈」。基本上,直到你能夠以簡明的形式重現問題,要幫助你將會非常困難。 –