C# 对象定义属性是否可为空

本文关键字:是否 属性 对象 定义 | 更新日期: 2023-09-27 18:33:16

我有一个包含事件日期的对象。在数据库中,我有一个名为 ObjectEventDateUTC 的字段,用于存储事件发生的 UTC 时间。

现在,我像这样定义 c# objet 类:

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

属性EventDateUTC在针对数据库运行的 linq-to-sql 查询中设置,字段EventDateUserTime稍后在接收用户时区作为参数的封装方法中进行设置。

我的问题是:在查询填充对象的时间和方法设置属性的时间之间,字段EventDateUserTime会发生什么。我应该保持我的对象定义不变,还是应该EventDateUserTime更改为 Nullable。

谢谢。

C# 对象定义属性是否可为空

擦除新对象中的字段,即内存设置为全零。然后运行字段初始值设定项(如果有),然后运行构造函数(CLI 执行第一步;编译器组合最后两个操作以.ctor())。

因此;它们以"全零"开始,即 DateTime.MinValue(0001年1月1日)。如果您满足于将其视为隐式 null(在 1.0 中是必需的),那么很好。如果你想要更明确的东西,那么DateTime?也可以。

字段 EventDateUserTime 在查询填充对象的时间与方法设置属性的时间之间会发生什么情况

它被初始化为其默认值 ( DateTime.MinValue )。无需将其设置为可为 null 的类型。

我应该保持我的对象定义不变,还是应该将事件日期用户时间更改为可为空。

最终,这取决于您的设计:如果具有未设置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
        }
    }
}