Nullables 和 Not.HasValue 与 IsNothing Nothing
Nullables and Not .HasValue vs. IsNothing Nothing
我已经 运行 陷入了一个 'interesting' 难题,我写了一些代码,我找不到充分的解释为什么明显的 'fix' 实际上可以在原来的地方工作代码没有。
我得到了一个对象列表,这些对象具有相互关联的计算,为了避免性能呈指数下降,我开始缓存一些关键值(存储在 Nullable 中),这些值回顾了以前的项目名单。为了清除缓存的值,我将它们设置为 Nothing,并有一些逻辑来检查它以便重新计算它们 一次 并且更新需要它。
变量声明:
Dim _nullable As System.Decimal? = Nothing
原代码:
If (Not Me._nullable.HasValue OrElse Me.OtherCondition) Then
'fixed'代码:
If (Me._nullable Is Nothing OrElse Not Me._nullable.HasValue OrElse Me.OtherCondition) Then
我对 .NET 的 Nullables 的理解表明这两个条件在功能和逻辑上应该是相同的,但是将前者更改为后者修复了一个错误。
这两种情况之间是否存在一些我没有看到的功能差异?
随着更多的调查变得明显,我最初问题的答案是这两者确实彼此相同,而我的问题的原因是我似乎一直在不知不觉中追逐竞争条件某种。
谢谢大家的帮助。
我已经 运行 陷入了一个 'interesting' 难题,我写了一些代码,我找不到充分的解释为什么明显的 'fix' 实际上可以在原来的地方工作代码没有。
我得到了一个对象列表,这些对象具有相互关联的计算,为了避免性能呈指数下降,我开始缓存一些关键值(存储在 Nullable 中),这些值回顾了以前的项目名单。为了清除缓存的值,我将它们设置为 Nothing,并有一些逻辑来检查它以便重新计算它们 一次 并且更新需要它。
变量声明:
Dim _nullable As System.Decimal? = Nothing
原代码:
If (Not Me._nullable.HasValue OrElse Me.OtherCondition) Then
'fixed'代码:
If (Me._nullable Is Nothing OrElse Not Me._nullable.HasValue OrElse Me.OtherCondition) Then
我对 .NET 的 Nullables 的理解表明这两个条件在功能和逻辑上应该是相同的,但是将前者更改为后者修复了一个错误。
这两种情况之间是否存在一些我没有看到的功能差异?
随着更多的调查变得明显,我最初问题的答案是这两者确实彼此相同,而我的问题的原因是我似乎一直在不知不觉中追逐竞争条件某种。
谢谢大家的帮助。