c#定义属性是否为null的对象

c#定义属性是否为null的对象,c#,C#,我有一个包含事件日期的对象。在数据库中,我有一个名为ObjectEventDateUTC的字段,它存储事件发生的UTC时间 现在,我定义c#objet类如下: public class MyObject { public DateTime EventDateUTC { get; set; } public DateTime EventDateUserTime { get; set; } } 属性EventDateUTC在针对数据库运行的linq to sql查询中设置,字段Even

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

现在,我定义c#objet类如下:

public class MyObject
{
   public DateTime EventDateUTC { get; set; }
   public DateTime EventDateUserTime { get; set; }
}
属性
EventDateUTC
在针对数据库运行的linq to sql查询中设置,字段
EventDateUserTime
稍后在一个封装方法中设置,该方法接收用户的时区作为参数

我的问题是:从查询填充对象到方法设置属性,字段
EventDateUserTime
会发生什么变化。我应该保持对象定义不变,还是应该将
EventDateUserTime
更改为可为空的

谢谢

从查询填充对象到方法设置属性,字段EventDateUserTime会发生什么变化


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

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

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

我应该保持对象定义不变,还是应该将EventDateUserTime更改为可空的

最终,这取决于您的设计:如果具有unset
EventDateUserTime
的对象的状态是合法的,则将字段设置为null;如果您总是在从LINQ检索后将其设置为正确,请将其保持为非Null

也许更好的方法是将
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
        }
    }
}

好,谢谢,;我会让它保持原样。还有一个问题,如果最小值为1900,那么当日期时间可能在公元前5世纪时,在历史上工作的人会发生什么?需要使用公元前5世纪日期的法国人不会使用
datetime
——但他们通常对时间部分不感兴趣;所以我希望他们使用一个
int
偏移量,以天为单位,从任意历元开始,可能是BC/CE分割,其中-ve为BV,+ve为CE。好吧,我只是好奇它是如何处理的。此外,我相信这并不是那么普遍。@frenchie粒子物理学家可能需要更大的数字,当然;p@frenchie:为什么会有问题?日期时间将覆盖1/1/0001至12/31/9999。这涵盖了15世纪(1400-1499)。如果你想覆盖不列颠哥伦比亚省日期或9999年以后的日期,那么你必须滚动你自己的日期类型。好的,谢谢;我会让它保持原样。还有一个问题,如果最小值为1900,那么当日期时间可能在15世纪时,从事历史工作的人会怎么样?@frenchie-这是SQL的问题。他们在SQL中找到了一些替代的表示方法,并在代码中转换为
DateTime