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。
谢谢。
擦除新对象中的字段,即内存设置为全零。然后运行字段初始值设定项(如果有),然后运行构造函数(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
}
}
}