DateTime
値に値があるかどうかを確認する必要があります。
いくつかのオプションがあります:
if (dateTime == default(DateTime))
または
if (dateTime == DateTime.MinValue)
またはヌル可能DateTime?
を使用
if (nullableDateTime.HasValue)
個人的には、かなり読みやすいので、3番目のバージョンを好むでしょう。しかし、データベースには、nullでないと定義されたいくつかのdatetime列があります。そのため、場合によっては最初の2つのオプションを選択する必要があります。
ジェネリックを扱う際にdefault
キーワードを使用すべきだとどこかで読みましたが、この場合ははるかに読みやすいのではないでしょうか? 2番目のオプションを使用する場合、新しい空のDateTimeインスタンスのデフォルト値はDateTime.MinValueであり、実装の詳細の匂いがあることを知っている必要があります。
「ベストプラクティス」を使用するには、どのオプションを使用する必要がありますか?
私はおそらくこれを本当に明確にするでしょう:
// Or private, or maybe even public
internal static readonly DateTime MagicValueForNullDateTimeInNonNullableColumns
= DateTime.MinValue;
わかりましたので、名前をわずかに言葉遣いを少なくしますが、あなたは私の言う意味を理解します。その値をどのように初期化するかはそれほど重要ではありません。何をしようとしているかは明らかです。
(もちろん、これが可能な場合はいつでもnull許容型を使用してください。特定の状況ではcould n'tを行うため、質問が行われたと想定しています。)
DateTime
値に値があるかどうかを確認する必要があります。
Nullable<DateTime>
を必要とする教科書の状況についてはかなり説明しました。私はそのオプションで行きます。
(値をnull以外のdb列に永続化する必要がある場合、明らかに何らかの変換レイヤーが必要になりますが、「マジック」値は可能な限りdbの近くに保持し、 C#コードはクリーンで慣用的です。)
「ベスト」プラクティスは、ヌル可能DateTime
を使用することです。ヌル値の値タイプが作成されました正確に「マジック」番号を信頼しないという理由で。
このアプローチで最も重要なのはその意図です。「デフォルト」の日付/時刻を持つために、あなたのコンテキストで何をmeanしますか?
Getdate()を使用してデータベースにデフォルト値を設定してから、すべてのnull値をmin値または任意の値に更新できます。少なくとも1つの条件があります