2011-01-25 64 views
3

可能重複:
Type result with conditional operator in C#設置日期時間問題?爲null使用三元操作

我只是工作的一個彈出修改用戶,當我遇到了以下問題,而試圖修改用戶的死亡日期:

在這種情況下,用戶的屬性DeathDateTime?(可空日期時間)。

user.Death = (model.Death != null) ? DateTime.Parse(model.Death) : null; 

所以我想,如果包含在模型中的價值,我將能夠簡單地檢查(model.Death是string)包含的值,我想那個數值的日期,否則我會設置如上所示,爲空。

但是,我無法使用這種語法,因爲它不允許我使用三元運算符將user.Death明確設置爲空,儘管user.Death = null工作得很好。

解決方案應用於:

替換: null: new Nullable<DateTime>()

我想我只是想知道,爲什麼我不能明確地設置可空DateTime的財產使用三元運算符爲空?

+1

常見問題,請查看上面的鏈接。簡短版本:DateTime和null不能相互轉換,因此無法確定表達式的返回類型。將一個或兩個投射到所需的返回類型是您需要執行的操作,或者(如您所找到的)在表達式中提供另一種類型以允許一個可以轉換爲另一個類型。 – 2011-01-25 18:53:39

回答

5

這不起作用,因爲編譯器不會一次插入雙方的隱式轉換。

您希望編譯器爲DateTime值轉換爲DateTime?在一邊,和nullDateTime?在另一邊。
這不可能發生。

如果您明確地將其中一半轉換爲DateTime?,則另一半也會隱式轉換。

0

我懷疑如果user.Death = null會工作,如果死亡沒有聲明爲可空類型。

例如, 「DateTime?death = null」會正常工作,而「DateTime death = null」不會編譯。