我在代码审查中注意到了一些事情,我想知道它是否合适.
a.EndDate.HasValue && a.EndDate > paymentPeriodEndDate
Run Code Online (Sandbox Code Playgroud)
不应该是:
a.EndDate.HasValue && a.EndDate.Value > paymentPeriodEndDate
Run Code Online (Sandbox Code Playgroud)
注意,a.EndDate是a DateTime?,而paymentPeriodEndDate是DateTime
应该使用.值?或者可以省略它.编译器允许它,并且代码可以工作.然后我想知道为什么有.Value可用.
D S*_*ley 14
可以为空的可隐式转换为它的底层类型,所以
a.EndDate > paymentPeriodEndDate
Run Code Online (Sandbox Code Playgroud)
隐式转换为
((DateTime)a.EndDate) > paymentPeriodEndDate
Run Code Online (Sandbox Code Playgroud)
这就要求.Value作为演员的一部分.
由于您已经完成了空检查,因此没有实际区别.
然后我想知道为什么有.Value可用.
Value当编译器无法隐式知道预期输出是什么时(例如,当传递给泛型方法或具有重载的方法时),您将使用.由于您正在与另一个进行比较,DateTime因此编译器可以推断出您的意图并.Value为您打电话.
*Techncially我觉得编译器在投加,因为自投运营商Nullable<T>到T是explicit,但原则应该是相同的.
| 归档时间: |
|
| 查看次数: |
3323 次 |
| 最近记录: |