空値の取り扱い

オライリーのプログラミングC# 第5版を買ったのはだいぶ前の話、実際日本語版が発売されたのは2009.02 だから。ただ、第5版と以前の版を見比べるといろいろなことが分かる。まず、ADO.NETの記述がものすごく減ったことこれは言うまでもなく.NET上のアクセステクノロジーがADO.NETからLINQに移行しつつあるのが大きい。

まあ、ADO.NETには今となっては後進的な面がいくつかあるけど多分、大きいのはNULLの取り扱い。SQLにはNULLという特殊な値が存在するのは周知の事実。問題はADO.NETのDataSetの場合はNULLが入っていたとき、nullではなくDBNull.Valueが入る。恐らく、ADO.NETの設計はC# 2.0でnull許容型が導入される前ということに起因すると思われる。結果的にDataSetのDataRowはDBNullとスキーマに指定された型がobject型という基底クラスを通じて戻ってくることになり、一種タイプセーフ性が崩れている。

そのため、整数値が帰ってくると期待してInt32でキャストするようなコードを欠くとNULLが入った時にキャストでこけることになる。まあ、そのため、私の場合には速度的にはかなり不利なんだがnull許容型とnull合体演算子を組み合わせたコードを書くようになった。int foo = row[“foo”] as int? ?? 0 みたいな形で。

ただ、この本に関して言えば、この本だけを頼りにプログラミングを進めるのは相当に苦しい。リフレクションとか重要なポイントは押さえているんだけど、.NET Frameworkの全体像が恐らくきちんとわかっていないと多分判んないんじゃないかなと思う。

コメントを残す