public class EventBus<T>
{
[NotNull] // annotation not valid on this declaration type
private static event Action<T> Events;
static EventBus()
{
// we always have a do-nothing event handler so we don't have to worry about null checks and race conditions
Events += T => { };
}
正如評論看到,我明確不想不得不面對空到處檢查活動。這可以通過在構造中分配一個從不調用的默認無操作事件來解決。 Resharper無法自動解決這個問題並不令人驚訝,因此我想用NotNull註釋對其進行註釋。不幸的是,看起來NotNull不能應用於事件,但是Resharper會毫不猶豫地在我打電話給我的事件時提醒我「可能的System.NullReferenceException」。爲什麼我不能將事件標記爲NotNull?
如果ReSharper的是要意識到錯誤,應該可以得到與註解避免它。
何必檢查空,如果你要分配它到一個不太明智的默認值呢?如果這是必須的,那麼爲什麼不只是將你的事件處理程序分配給一個空的委託實例呢? '私人靜態事件動作 Events = _ => {};' –
你是對的,我應該初始化它內聯而不是在構造函數中,因爲這會更清楚。默認的原因是,我*不*必須檢查爲空。目標是,當沒有事件處理程序連接時,事件仍然可以被稱爲Events()。 –