61

DateTime値があるかどうかを確認する必要があります。

いくつかのオプションがあります:

if (dateTime == default(DateTime))

また

if (dateTime == DateTime.MinValue)

またはnullableを使用するDateTime?

if (nullableDateTime.HasValue)

個人的には、かなり読みやすいので、3 番目のバージョンを好みます。しかし、私たちのデータベースには、null ではないと定義されている日時列がいくつかあります。そのため、場合によっては最初の 2 つのオプションを使用する必要があります。

ジェネリックを扱うときにキーワードを使用する必要があることをどこかでdefault読みましたが、この場合ははるかに読みやすくありませんか? 2 番目のオプションを使用する場合、新しい空の DateTime インスタンスのデフォルト値が DateTime.MinValue であることを知っておく必要があります。これには、実装の詳細の匂いがします。

では、「ベスト プラクティス」を使用するにはどのオプションを使用すればよいでしょうか。

4

4 に答える 4

72

私はおそらくこれを本当に明確にするでしょう:

// Or private, or maybe even public
internal static readonly DateTime MagicValueForNullDateTimeInNonNullableColumns
    = DateTime.MinValue;

わかりましたので、名前を少し冗長にしますが、私の言いたいことはわかります。その値をどのように初期化するかはそれほど重要ではありません。何をしようとしているのかは明らかです。

(もちろん、これにはいつでもnull許容型を使用してください。特定の状況ではそれができないため、質問が行われたと思います。)

于 2013-04-29T14:49:55.453 に答える
20

DateTime値があるかどうかを確認する必要があります。

を必要とする教科書の状況をかなり説明しましたNullable<DateTime>。私はそのオプションを使用します。

(値をnull以外のdb列に永続化する必要がある場合は、ある種の変換レイヤーが明らかに必要ですが、「魔法の」値をできるだけdbに近づけ、維持しようとしますあなたの C# コードはクリーンで慣用的です。)

于 2013-04-29T14:50:38.413 に答える
9

「ベスト」プラクティスは、 nullable を使用することDateTimeです。Null 許容値型は、まさに「マジック」ナンバーを信頼しないという理由で作成されました。

このアプローチで最も重要なことは、その意図です。コンテキストで「デフォルト」の日付/時刻を持つことはどういう意味ですか?

于 2013-04-29T14:51:48.120 に答える
0

おそらく、getdate() を使用してデータベースにデフォルト値を設定し、すべての null 値を最小値または好きなものに更新できます。少なくとも1つの条件があります

于 2013-04-29T14:56:36.613 に答える