如果我在名为"TimeLastAccessed"的类上有一个DateTime,那么这个DateTime可以为空是否更有意义:
public DateTime? TimeLastAccessed { get; set }
if (TimeLastAccessed == null) // ... handle it
Run Code Online (Sandbox Code Playgroud)
表示从未访问过或检查DateTime.MinValue
public DateTime TimeLastAccessed { get; set; }
if (TimeLastAccessed == DateTime.MinValue) // ... handle it
Run Code Online (Sandbox Code Playgroud)
?
我同意在没有其他考虑因素的情况下Nullable <DateTime>是更好的选择.
但是,您需要考虑需要与之互操作的其他系统.
例如:
如果要将.NET DateTime暴露给COM客户端,则无法使用Nullable <DateTime>.
如果要将值存储在SQL Server数据库中,请记住SQL Server无法将DateTime.MinValue存储为DateTime.
需要考虑的另一点是Nullable可以为API的调用者增加一些复杂性:他们可能需要考虑如何处理null case.在某些情况下,使用null情况的默认值可能更简单.例如,考虑一个公开属性"ExpiryDate"的类,其中需要一个值来指示该项永不过期.
一种方法是使用Nullable<DateTime>带有表示"永不过期"的null.另一种方法是使用标准的DateTime来DateTime.MaxValue表示"永不过期".
在此示例中,标准DateTime的"过期"测试更简单:
if (item.ExpiryDate <= DateTime.Today) ...
Run Code Online (Sandbox Code Playgroud)
而不是Nullable<DateTime>:
if (item.ExpiryDate.HasValue && item.ExpiryDate <= DateTime.Today) ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5635 次 |
| 最近记录: |