C# 如何仅当日期时间具有非空值时才将其强制转换为日期时间

C# 如何仅当日期时间具有非空值时才将其强制转换为日期时间,c#,datetime,nullable,C#,Datetime,Nullable,我有两行代码: result.birthdateSpecified = (someData.BirthDate != null || false); result.birthdate = someData.BirthDate as DateTime; 我希望能够将result.birthdate设置为someDate.birthdate,仅当它存在时,在一行中。 这样我就不用写if语句了。只是想知道这是否可能 仅供参考-结果。生日是一个日期时间和一些数据。生日是一个日期时间?(可为空) 我知道

我有两行代码:

result.birthdateSpecified = (someData.BirthDate != null || false);
result.birthdate = someData.BirthDate as DateTime;
我希望能够将result.birthdate设置为someDate.birthdate,仅当它存在时,在一行中。 这样我就不用写if语句了。只是想知道这是否可能

仅供参考-结果。生日是一个日期时间和一些数据。生日是一个日期时间?(可为空)


我知道我不能用'as'强制转换它,但不确定是否还有其他东西可以使用?

空合并操作符如何

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

当然,赋值将无条件完成,因此将调用setter,而getter可能被调用。。。这可能是你不想要的东西。。。但是,只有当someData.BirthDate不为null时,该值才会更改

那么null合并操作符呢

result.birthdate = someData.BirthDate ?? result.birthdate;
当然,赋值将无条件完成,因此将调用setter,而getter可能被调用。。。这可能是你不想要的东西。。。但是,只有当someData.BirthDate不为null时,该值才会更改

result.birthdate = someData.BirthDate ?? default(DateTime);
或者,当指定的
birthdateSpecified
false
时,您可以使用任何sentinel值替换
default(DateTime)

我认为,从客户端POV来看,确保当指定的
birthdate
为false时,
birthdate
字段中有一个可预测的“虚拟”值,而不是可能在那里留下看起来正确的数据更有意义。

我会:

result.birthdate = someData.BirthDate ?? default(DateTime);
或者,当指定的
birthdateSpecified
false
时,您可以使用任何sentinel值替换
default(DateTime)


我认为,从客户端POV来看,确保当指定的
birthdate
为false时,
birthdate
字段中有一个可预测的“虚拟”值,而不是潜在地在那里留下正确的数据更为合理。

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

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

您可以结合使用空合并和自赋值:

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

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

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

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

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