豚吐露@wiki

DateTimeの初期値に『0001/01/01 00:00』を入れたくない

最終更新:

ohden

- view
管理者のみ編集可

DateTimeの初期値に『0001/01/01 00:00』を入れたくない


『DateTime』で宣言してるとこを『DateTime?』で宣言すると初期値が『0001/01/01 00:00』から『null』になる。

『DateTime?』と『Nullable<DateTime>』は同じで、その値型でnullを許容するという宣言。
※DateTimeは構造体なので値型。
よって、nullの代入が可能となるが、『DateTime』と『DateTime?』は全く別の型であるという認識が必要。

例えば、以下のようなコードを書くとエラーとなる。
e.g.)
DateTime? date = null;
date = DateTime.Now;
date.ToString("yyyyMMdd");

これは『DateTime』型に『ToString(string hoge)』というメソッドはあるが、『DateTime?』型に『ToString(string hoge)』というメソッドは無いことが原因。

このような場合は、以下のように『date.Value』を参照することで回避が可能。
e.g.)
DateTime? date = null;
date = DateTime.Now;
date.Value.ToString("yyyyMMdd");



また、Nullable型の場合のみ『??』演算子が使用可能となる。
『??』演算子は以下のように使用する。
e.g.)
int? x = 1;
z = x ?? y;

これを??演算子を使わずに書き直すと...
e.g.)
int? x = 1;
if (null != x) {
  z = x;
} else {
  z = y;
}
となる。

nullableな場合にありがちなnull判定を演算子一発でやってくれる優れものです。


rubyとかだと
z = x || y
ですな。


更新日: 2021年02月19日 (金) 17時31分21秒

名前:
コメント:

すべてのコメントを見る
記事メニュー
目安箱バナー