我正在设计一个具有私有(private)消息传递系统的 C#/NHibernate 网站。我希望管理员检查用户是否以及何时阅读了一条消息,并一起突出显示用户尚未阅读的那些消息。为了实现这两个目标,我找到了两个选择:
选项 1
class Message
{
DateTime? Read;
}
其中Read==null
表示还没有读过
选项 2
class Message
{
DateTime Read;
}
其中 Read==default(DateTime)
(January 1st 1 A.D., 0:00:00) 表示尚未读取。
在大学里,我被教导使用NULL
值来处理所有特殊 情况,并且还使用可空类型似乎不错的选择,因为通过检查它们是否为 NULL
来查询未读消息看起来更容易。
但是,使用可空类型至少涉及代码中的装箱和拆箱,性能会下降。另一方面,查询未读消息就是比较值(但可以索引)
我的问题是
您对此建议的方法是什么?在这种情况下,最佳实践建议是什么?
最佳答案
使用 DateTime?
.它的具体目的是避免使用保留值(又名“魔数(Magic Number)”)来表示特殊情况,例如 null
.
此外,使用可空类型本身不会引入装箱。任何可能被装箱的值仍然会被装箱,但您不会通过切换简单地引入任何装箱。 Nullable<T>
type其实是一个struct,可以和null
比较(或 VB.NET 中的 Nothing
)严格来说是一种语言约定。在幕后,它被翻译成对 HasValue
的支票。属性(property)。
关于c# - 更好的日期时间?或者对 NULL 使用 default(DateTime)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4821560/