2010-01-28 131 views
2

与三元奇怪的.Net日期时间问题

DateTime filterDate = endDate.HasValue ? endDate.Value : DateTime.Now.AddDays(7); 

非三元

DateTime filterDate; 
if (endDate.HasValue) 
    filterDate = endDate.Value; 
else 
    filterDate = DateTime.Now.AddDays(7); 

设置如果调试这两个语句filterDate的值不会是相同的。为什么是这样?

在第一个示例中,filterDate的值为01/01/0001。 在第二个例子中,我得到了预期的结果,即filterDate是将来7天的日期时间。

编辑: 在这一点上,我甚至尝试设置endDate = null只是为了确保这里是屏幕截图。 alt text http://www.freeimagehosting.net/uploads/57bef2e50a.png

我见过的最奇怪的事情。

+0

你有没有试图把周围的三元括号? – 2010-01-28 15:14:17

+0

您是否为您的结束日期使用了可为空的DateTime? (即DateTime?endDate) – Shimrod 2010-01-28 15:15:45

+1

什么是endDate? – serialhobbyist 2010-01-28 15:15:57

回答

6

看起来结束日期被初始化为DateTime.MinValue,您可以显示在您声明结束日期的代码?

而且,更短的方式:

DateTime filterDate = endDate ?? DateTime.Now.AddDays(7); 
+0

我试过这种方式,得到了与三元版本相同的结果。我想也许DateTime对象不支持null合并运算符。 endDate是mvc控制器操作的参数。我没有传递任何东西,所以它应该是空的。如果我快速查看,endDate为空。 – 2010-01-28 15:21:04

+0

同意。只有这样我才能重现错误是将endDate设置为最小值而不是null。 – Bomlin 2010-01-28 15:22:12

5

我无法重现这一点。在任何情况下,这是这样做的首选方式:

DateTime filterDate = endDate ?? DateTime.Now.AddDays(7);