2

イベントの日付を含むオブジェクトがあります。データベースには、イベントが発生した UTC 時刻を格納する ObjectEventDateUTC のようなフィールドがあります。

今のところ、次のように c# オブジェクト クラスを定義しています。

public class MyObject
{
   public DateTime EventDateUTC { get; set; }
   public DateTime EventDateUserTime { get; set; }
}

プロパティEventDateUTCは、データベースに対して実行される linq-to-sql クエリでEventDateUserTime設定され、フィールドは後で、ユーザーのタイムゾーンをパラメーターとして受け取るカプセル化されたメソッドで設定されます。

EventDateUserTime私の質問は次のとおりです。クエリによってオブジェクトが設定されてから、メソッドによってプロパティが設定されるまでの間、フィールドはどうなりますか。オブジェクト定義をそのままにしておくべきですか、それともEventDateUserTimeNullable に変更するべきですか?

ありがとう。

4

3 に答える 3

4

新しいオブジェクトのフィールドは消去されます。つまり、メモリはすべてゼロに設定されます。次に、フィールド初期化子 (存在する場合) が実行され、次にコンストラクターが実行されます (CLI が最初のステップを実行します。コンパイラーは最後の 2 つの操作を結合して make します.ctor())。

したがって; それらは「すべてゼロ」、つまりDateTime.MinValue(0001 年 1 月 1 日) として始まります。それを暗黙の null として扱うことに満足している場合 (1.0 で必要だったように)、問題ありません。より明確なものが必要な場合は、それDateTime?も問題ありません。

于 2012-05-04T13:26:09.400 に答える
2

クエリによってオブジェクトが設定されてからメソッドによってプロパティが設定されるまでの間に EventDateUserTime フィールドに何が起こるか

デフォルト値 ( DateTime.MinValue) に初期化されます。null 許容型に設定する必要はありません。

于 2012-05-04T13:26:01.023 に答える
1

Should I keep my object definition as is or should I change EventDateUserTime to a Nullable.

Ultimately, this depends on your design: if the state of the object with unset EventDateUserTime is legitimate, make the field nullable; if you always set it right after retrieving from LINQ, keep it non-nullable.

Perhaps a better approach would be to make EventDateUserTime a calculated property, and store the user time zone instead:

public class MyObject {
    public TimeZone UserTimeZone { get; set; }
    public DateTime EventDateUTC { get; set; }
    public DateTime EventDateUserTime {
        get {
            // Calculate time based on EventDateUTC and UserTimeZone
        }
    }
}
于 2012-05-04T13:29:28.507 に答える