![](/img/trans.png)
[英]best method to solve Nullable object must have a value in datetime
[英]Nullable object must have a value datetime
數據庫
EmbarkDate [] allowNulls checked
DisembarkDate [] allowNulls checked
update [dbo].[t_CrewContract] set EmbarkDate= null where cc_ID='AEDAEC31-6108-CE8F-97DF-114FD87A6257'
update [dbo].[t_CrewContract] set DisembarkDate= null where cc_ID='AEDAEC31-6108-CE8F-97DF-114FD87A6257'
C#
public DateTime? EmbarkDate { get; set; }
public DateTime? DisembarkDate{ get; set; }
ContractItems.Add(new ContractItem
{
EmbarkDate = item.cc_EmbarkDate.HasValue != null ? item.cc_EmbarkDate.Value : item.cc_EmbarkDate = null,
DisembarkDate = item.cc_DisembarkDate.HasValue != null ? item.cc_DisembarkDate.Value : item.cc_DisembarkDate = null,
});
if(activeContract.EmbarkDate == null)
{
//...codes
}
錯誤:可為空的對象必須具有值什么問題,謝謝
EmbarkDate = item.cc_EmbarkDate.HasValue != null
? item.cc_EmbarkDate.Value : item.cc_EmbarkDate = null,
DisembarkDate = item.cc_DisembarkDate.HasValue != null
? item.cc_DisembarkDate.Value : item.cc_DisembarkDate = null
這里的問題是您將HasValue
與null進行比較,因為它是一個布爾值,所以它始終為false。
您只需要具有以下內容和相同的DisembarkDate
。
EmbarkDate = item.cc_EmbarkDate.HasValue ? (DateTime?)item.cc_EmbarkDate.Value : item.cc_EmbarkDate = null
您使用的是條件表達式,但條件錯誤,整個表達式毫無意義。 同樣,第三個操作數具有將空值賦給您已經知道為空值的副作用(代碼氣味)。
item.cc_EmbarkDate.HasValue
的值是布爾值,因此永遠不能為null。 這使表達式為真,即使沒有值,您也將始終嘗試從可為空的值中獲取值。
您將要做的是:
EmbarkDate = item.cc_EmbarkDate.HasValue ? item.cc_EmbarkDate.Value : null,
DisembarkDate = item.cc_DisembarkDate.HasValue ? item.cc_DisembarkDate.Value : null
但是,如果有一個值,則返回值,否則返回null是沒有意義的,因為那是nullable已包含的內容。 您只需執行以下操作:
EmbarkDate = item.cc_EmbarkDate,
DisembarkDate = item.cc_DisembarkDate
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.