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