むう

x.value : objectで、

int? y = x.p() ? null : (int)x.value;

とするとコンパイルエラー。null : int?への変換は暗黙にはできないということなのかな。

int? y = x.p() ? (int?)null : (int)x.value;

として回避。

あとは、x : int?に対して、

object y = x ?? System.DBNull.Value;

コンパイルエラー。こっちは

object y = x.HasValue ? (object)x.Value : (object)System.DBNull.Value;

として回避。

ADO.NET(?)がobject使いまくりでGenerics使っていないのが問題だろうか。きちんと考えていないのでGenericsがあれば解決するかどうかはわかりませんが。