簡體   English   中英

c#對象定義屬性是否可為空

[英]c# object defining property nullable or not

我有一個包含事件日期的對象。 在數據庫中,我有一個名為ObjectEventDateUTC之類的字段,用於存儲事件發生的UTC時間。

現在,我正在定義c#objet類,如下所示:

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

在針對數據庫運行的linq-to-sql查詢中設置屬性EventDateUTC ,然后在封裝的方法中設置EventDateUserTime字段,該方法接收用戶的時區作為參數。

我的問題是:在查詢填充對象的時間與方法設置屬性的時間之間, EventDateUserTime字段會發生什么情況。 我應該保持對象定義不變還是將EventDateUserTime更改為Nullable。

謝謝。

新對象中的字段將被擦除,即內存設置為全零。 然后運行字段初始化程序(如果有的話),然后運行構造函數(CLI進行第一步;編譯器將最后兩個操作組合在一起以.ctor() )。

從而; 它們以“全零”開始,即DateTime.MinValue (0001年1月1日)。 如果您滿意地將其視為隱式null(如1.0中所必需),則可以。 如果您想要更明確的內容,那么DateTime? 也可以

在查詢填充對象的時間與方法設置屬性的時間之間,EventDateUserTime字段會發生什么情況

它被初始化為其默認值( DateTime.MinValue )。 您無需將其設置為可為空的類型。

我應該保持對象定義不變還是將EventDateUserTime更改為Nullable。

最終,這取決於您的設計:如果未設置EventDateUserTime的對象的狀態是合法的,則使該字段可為空; 如果您始終在從LINQ檢索后立即將其設置為正確,請使其不可為空。

也許更好的方法是將EventDateUserTime設為計算所得的屬性,並存儲用戶時區:

public class MyObject {
    public TimeZone UserTimeZone { get; set; }
    public DateTime EventDateUTC { get; set; }
    public DateTime EventDateUserTime {
        get {
            // Calculate time based on EventDateUTC and UserTimeZone
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM