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);