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 的理解表明这两个条件在功能和逻辑上应该是相同的,但是将前者更改为后者修复了一个错误。

这两种情况之间是否存在一些我没有看到的功能差异?

随着更多的调查变得明显,我最初问题的答案是这两者确实彼此相同,而我的问题的原因是我似乎一直在不知不觉中追逐竞争条件某种。

谢谢大家的帮助。