[C#]EventHandler で null チェックを省略する方法

EventHandler は初期化しないと null なので普通はこう書きます。

   1:          public event PropertyChangedEventHandler PropertyChanged;
   2:   
   3:          private void NotifyPropertyChanged(String info)
   4:          {
   5:              if (PropertyChanged != null)
   6:              {
   7:                  PropertyChanged(this, new PropertyChangedEventArgs(info));
   8:              }
   9:          }

毎回 null チェックするのがなんとなくいやな感じです。

その場合は、

   1:          public event PropertyChangedEventHandler PropertyChanged = delegate { };
   2:   
   3:          private void NotifyPropertyChanged(String info)
   4:          {
   5:              PropertyChanged(this, new PropertyChangedEventArgs(info));
   6:          }

と書くことができます。

メリット:

  • (メソッド内の)コードがシンプルになるので理解しやすい
  • 宣言は1カ所だが、使用するのは1カ所とは限らないので、使用する部分がシンプルなほうがメリットが大きい

デメリット:

  • イベントハンドラは null チェックするのが一般的になってしまっているので、多くの人がかかわるようなプロジェクトには不向きかもしれない

 

(空デリゲートの呼び出しと、null チェックの実行速度の比較は参考リンク1で行ってますが、気にするほどではないようです)

個人的には、コードが読みやすくなることが最優先なので、null チェックしない方法でいきたいと思います。

 

参考リンク

  1. イベントに空デリゲートを仕込ませてみる
  2. イベントを発生させるメソッドの実装(2)
  3. eventでnullチェックをしないで済む方法: 色々メモ(自分用)