我有这两行代码:
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'进行转换,但不确定是否还有其他可以使用的内容?
除了其他答案,您还可以编辑第一行以使用HasValue
类型的Nullable
属性:
result.birthdateSpecified = someData.BirthDate.HasValue;
result.birthdate = someData.BirthDate ?? default(DateTime);
空合并运算符是什么?
result.birthdate = someData.BirthDate ?? result.birthdate;
确保,赋值将无条件完成,因此将调用setter,并且可能会调用getter ...这可能是您不想要的事情……但只有在someData.BirthDate时,值才会更改不为空
我愿意:
result.birthdate = someData.BirthDate ?? default(DateTime);
或者您可以将default(DateTime)
替换为birthdateSpecified
为false
时使用的任何前哨值。
我认为从客户端POV来确保birthdateSpecified
为假时,在birthdate
字段中有一个可预测的“虚拟”值,而不是在其中保留看起来正确的数据是更有意义的。
您可以结合使用空合并和自我分配:
result.birthdate = someData.BirthDate ?? result.birthdate;