簡體   English   中英

可空對象必須具有值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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM