オブジェクトのNullチェックって面倒ですよね。.Net 3.0以降なら拡張メソッドでNullセーフなメソッドを実装できます。
例えば、IDisposableにNullチェックを入れたDisposeを実装するならこんな感じです。
using System; namespace SystemExtensions { /// <summary> /// IDisposableインターフェースの拡張メソッドを実装します。 /// </summary> public static class IDisposableExtensions { /// <summary> /// NullセーフなDispose実装です。 /// </summary> /// <param name="self">IDisposableを実装したインスタンス</param> public static void NullSafeDispose(this IDisposable self) { if (self == null) return; self.Dispose(); } }
そうすると、これが、
if (dataAdapter != null) dataAdapter.Dispose();
こんな風に少しすっきり書けます。dataAdapterがNullでも例外は発生しません。
dataAdapter.NullSafeDispose();
Null例外が発生しないのは、拡張メソッドがクラスメソッドだからです。通常のクラスメソッドとの違いは属性の有無だけです。
興味のある人は、IL DASMでIL(中間コード)を見てみてください。System.Runtime.CompilerServices.ExtensionAttributeが付加されているはず。