c#对象定义属性是否为nullable

时间:2012-05-04 13:22:56

标签: c#

我有一个包含事件日期的对象。在数据库中,我有一个名为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。

感谢。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

  

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

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

答案 2 :(得分:1)

  

我应该按原样保留对象定义,还是应该将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
        }
    }
}