Class PersonプロパティのBirthdayをnull 許容 DateTime として定義しましたか? では、次の例で null 合体演算子が機能しないのはなぜですか?
cmd.Parameters.Add(new SqlParameter("@Birthday",
SqlDbType.SmallDateTime)).Value =
person.Birthday ?? DBNull.Value;
私が得たコンパイラ エラーは「演算子 '??' でした。タイプ「System.DateTime?」のオペランドには適用できません。および「System.DBNull」」
以下もコンパイルエラーになりました:
cmd.Parameters.Add(new SqlParameter("@Birthday",
SqlDbType.SmallDateTime)).Value =
(person.Birthday == null) ? person.Birthday:DBNull.Value;
リファクタリングで推奨されているように (オブジェクト) にキャストを追加し、コンパイルしましたが、正しく動作せず、値は両方の場合で sqlserver db に null として格納されました。
SqlDbType.SmallDateTime)).Value =
person.Birthday ?? (object)DBNull.Value;
誰かがここで何が起こっているのか説明できますか?
次の不器用なコードを使用する必要がありました。
if (person.Birthday == null)
cmd.Parameters.Add("@Birthday", SqlDbType.SmallDateTime).Value
= DBNull.Value;
else cmd.Parameters.Add("@Birthday", SqlDbType.SmallDateTime).Value =
person.Birthday;