2010-01-28 129 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);