6

直截了当的问题:我有一些变量是双精度的。我希望能够在其中存储“空”状态,即我需要能够表示该变量不包含有效数据。我真的不想将布尔“有效”变量与每个双精度数相关联,这将是丑陋的并且可能是不必要的。

首先,我发现必须以不同的方式声明变量以允许检查“IsNothing”的概念,所以我这样做:

dim someDouble as Double?

(注意问号)。如果我不这样声明,错误检查会给我一个“IsNot 需要具有引用类型的操作数”消息。

声明后,将变量设置为...

someDouble = Nothing

...似乎将其设置为零,因为它从不运行我的 if/else 语句中的代码来检查是否someDouble IsNot Nothing...这是不好的,因为该变量可以合法地将 0 存储为有效的数据。

我在这里想念什么?谢谢!

编辑:我遗漏了我在类中使用属​​性GetSet这些值。事实证明,我做的事情是正确的,只是我将Property' 的类型保留为 aDouble而不是 a Double?,所以它被强制转换回零而不是Nothing值。不过,有用的信息仍然在下面的答案中!

4

2 回答 2

7

你应该去阅读MSDN上的Nullable Structure

这将解释如何使用它

例子:

Sub Main()
    Dim someDouble As Double?

    someDouble = Nothing
    If someDouble.HasValue Then
        Console.WriteLine(someDouble.ToString)
    Else
        Console.WriteLine("someDouble is nothing / null")
    End If
    Console.Read()
End Sub
于 2012-01-03T19:56:12.447 回答
4

虽然我不知道是什么导致了您对“Nothing”的问题,但您也可以使用“Double.NaN”(不是数字)来代替。这也不需要特殊的“Double?” 宣言。

于 2012-01-03T19:58:12.160 回答