簡體   English   中英

僅當它具有非空值時,如何將可為空的日期時間轉換為日期時間

[英]How to cast a nullable date time to a date time only if it has non null value

我有這兩行代碼:

result.birthdateSpecified = (someData.BirthDate != null || false);
result.birthdate = someData.BirthDate as DateTime;

我希望能夠在一行中將 result.birthdate 設置為 someDate.BirthDate,僅當它存在時。 這樣我就不必寫任何 if 語句。 只是想知道是否可能?

僅供參考 - result.birthDate 是 DateTime 而 someData.BirthDate 是 DateTime? (可空)

我知道我不能用“as”來投射它,但不確定是否還有其他東西我可以使用?

空合並運算符呢?

result.birthdate = someData.BirthDate ?? result.birthdate;

當然,分配將無條件完成,因此將調用 setter,並且可能會調用 getter……這可能是您不想要的……但只有在 someData.BirthDate 不是時,該值才會改變空值

除了其他答案之外,您還可以編輯第一行以使用Nullable類型的HasValue屬性:

result.birthdateSpecified = someData.BirthDate.HasValue;
result.birthdate = someData.BirthDate ?? default(DateTime);

我會做:

result.birthdate = someData.BirthDate ?? default(DateTime);

或者,您可以將default(DateTime)替換為您在birthdateSpecifiedfalse時使用的任何哨兵值。

我認為從客戶端 POV 確保當birthdateSpecified為假時, birthdate字段中有一個可預測的“虛擬”值,而不是可能在那里留下看起來正確的數據更有意義。

您可以結合使用空合並和自賦值:

result.birthdate = someData.BirthDate ?? result.birthdate;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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