むう
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があれば解決するかどうかはわかりませんが。