拡張メソッドは、非常に便利です。
既存のクラスへのメソッドを追加して、インスタンスメソッドのように呼び出しができます。
元々クラスに存在したメソッドのように使えるので、それまで複数ステップを使って書いていたソースをまとめたり、バラつきのあったコーディングをまとめたりできます。
【C#】拡張メソッド まとめ
拡張メソッドを用途ごとに、まとめました。
foreach
foreach null listのチェック
foreachは、nullチェックをしないと’System.NullReferenceException’の例外が発生します。
if文で、if (list != null && list.Count > 0)と書かなければいけないようなケースをOrEmptyIfNull()の拡張メソッドで解決します。
list = nullの場合は、Enumerable.Empty<T>()でlist.Count = 0の状態にして返すことで、’System.NullReferenceException’の例外発生を回避できます。
foreach index付き
foreachは、indexを使わない事で、’System.ArgumentOutOfRangeException’の例外発生をしないようにしているのに、インデックス付きで使いたいことが時々あります。
でもint i = 0;と、変数を宣言してカウントアップするのもレガシーコードのようでなんだが嫌ですよね。Indexed()の拡張メソッドで解決します。
タプルにして返すことで、listの要素foreachで回しながら、indexが取得できます。
list
Listのnull・空チェック
if文で、if (list != null && list.Count > 0)と書かなければいけないようなケースをIsNullOrEmpty()の拡張メソッドで解決します。
list != nullか、list.Count > 0のどちらかしか書いてないようなこともなくなり、コードのバラつきも減ります。
キャスト
nullをToString()
nullをToString()すると落ちます。
でもXxx != null ? Xxx.ToString() : null;と毎回判定をするというのも大変です。ToStringOrDefault()・ToStringOrEmpty()の拡張メソッドで解決します。
DeepCopy
ディープコピー
参照型のクラスは、そのままではコピー先の変更がコピー元に影響してしまいます。
参照型のクラスをコピー元と切り離して、別オブジェクトでコピーする方法です。
まとめ
拡張メソッドは、非常に便利です。事前に用意しておくだけで、コーディングの効率が格段に変わります。
活用して、快適なコーディングを!
それでは、また。