我在进行的代码审查中注意到了一些内容,并且想知道它是否合适。
a.EndDate.HasValue && a.EndDate > paymentPeriodEndDate
那不应该是:
a.EndDate.HasValue && a.EndDate.Value > paymentPeriodEndDate
请注意,a.EndDate为DateTime?
,而paymentPeriodEndDate为DateTime
应该使用.Value吗?还是可以忽略它。编译器允许它,并且代码可以工作。然后,我只是想知道为什么会有.Value可用。
nullable可隐式地转换为其基础类型,因此
a.EndDate > paymentPeriodEndDate
隐式转换为
((DateTime)a.EndDate) > paymentPeriodEndDate
这.Value
是演员阵容的一部分。
由于您已经完成了空检查,因此没有实际区别。
然后,我只是想知道为什么会有.Value可用。
如果Value
编译器无法隐式知道预期的输出是什么(例如,当传递给泛型方法或带有重载的方法时),将使用此方法。由于您正在与另一个进行比较,DateTime
因此编译器可以推断您的意图并.Value
为您服务。
* Techncially我觉得编译器在投加,因为自投运营商Nullable<T>
到T
是explicit
,但原则应该是相同的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句