How do I use a null value in a double in VB.Net 2010?

evilspoons picture evilspoons · Jan 3, 2012 · Viewed 18.5k times · Source

Straightforward question: I have a few variables that are doubles. I would like to be able to store a "null" state in them, i.e. I need to be able to represent that the variable doesn't contain valid data. I'd really rather not associate a boolean "is valid" variable with every single double, that would be ugly and likely unnecessary.

First, I found out that one has to declare the variable differently to allow the concept of 'IsNothing' to be checked, so I do this:

dim someDouble as Double?

(Note the question mark). If I don't declare it like that, the error check gives me a "IsNot requires operands that have reference types" message.

Once declared, setting the variable to...

someDouble = Nothing

...seems to set it to zero, because it never runs the code in my if/else statement that checks whether someDouble IsNot Nothing... which is bad because the variable can legitimately store a 0 as a valid piece of data.

What am I missing here? Thanks!

EDIT: I left out that I was using properties in a class to Get and Set these values. It turns out I was doing things right except I left my Property's type as a Double instead of a Double? so it was casting back to zero instead of the Nothing value. Useful information still in the answers below, though!

Answer

Fredou picture Fredou · Jan 3, 2012

you should go read on Nullable Structure on MSDN

this will explain how to use it

example:

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