c# - 更好的日期时间?或者对 NULL 使用 default(DateTime)?

标签 c# nhibernate

我正在设计一个具有私有(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/

相关文章:

c# - 内存效率:Passing Html code of aspx page through codebehind

c# - 将 XML 写入内存而不是磁盘

mysql blob 与 mvc 和 nhibernate

Nhibernate QueryOver。 OrderBy 使用字符串属性名称。

c# - 2013 年末使用 Oracle 数据库的 .NET 应用程序有哪些数据访问选项?

c# - 带有 async/await 的 Socket.DuplicateAndClose 失败并出现 E_INVALIDARG

c# - 同步框架: How to check if a Row has been Synchronized with Miscrosoft Azure?

nhibernate - Fluent Nhibernate - HasMany - 未保存子对象

c# - 如何在 MVC 中使用 DropDownList(ComboList)

nhibernate - FluentNhibernate 多对多和 Inverse()