[英]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)
替換為您在birthdateSpecified
為false
時使用的任何哨兵值。
我認為從客戶端 POV 確保當birthdateSpecified
為假時, birthdate
字段中有一個可預測的“虛擬”值,而不是可能在那里留下看起來正確的數據更有意義。
您可以結合使用空合並和自賦值:
result.birthdate = someData.BirthDate ?? result.birthdate;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.