如何将可为空的日期时间转换为只有非空值的日期时间

问题描述 投票:1回答:3

我有这两行代码:

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

我希望能够在一行中将result.birthdate设置为someDate.BirthDate,只要它存在。这样我就不必编写任何if语句。只想知道是否有可能?

FYI-result.birthDate是DateTime,someData.BirthDate是DateTime吗? (可为空)

我知道我无法使用'as'进行转换,但不确定是否还有其他可以使用的内容?

c# datetime nullable
3个回答
3
投票

除了其他答案,您还可以编辑第一行以使用HasValue类型的Nullable属性:

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

4
投票

空合并运算符是什么?

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

确保,赋值将无条件完成,因此将调用setter,并且可能会调用getter ...这可能是您不想要的事情……但只有在someData.BirthDate时,值才会更改不为空


2
投票

我愿意:

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

或者您可以将default(DateTime)替换为birthdateSpecifiedfalse时使用的任何前哨值。

我认为从客户端POV来确保birthdateSpecified为假时,在birthdate字段中有一个可预测的“虚拟”值,而不是在其中保留看起来正确的数据是更有意义的。


1
投票

您可以结合使用空合并和自我分配:

result.birthdate = someData.BirthDate ?? result.birthdate;
© www.soinside.com 2019 - 2024. All rights reserved.