Как использовать нулевое значение в double в VB.Net 2010? - PullRequest
6 голосов
/ 03 января 2012

Простой вопрос: у меня есть несколько переменных, которые являются двойными. Я хотел бы иметь возможность хранить в них «нулевое» состояние, т. Е. Мне нужно иметь возможность представлять, что переменная не содержит допустимых данных. Я бы действительно не хотел связывать логическую переменную «валидно» с каждым двойным числом, что было бы некрасиво и, вероятно, не нужно.

Сначала я обнаружил, что нужно объявить переменную по-разному, чтобы можно было проверить концепцию IsNothing, поэтому я делаю это:

dim someDouble as Double?

(обратите внимание на знак вопроса). Если я не объявляю это так, проверка ошибок выдает мне сообщение «IsNot требует операнды, которые имеют ссылочные типы».

После объявления установите переменную на ...

someDouble = Nothing

..., кажется, устанавливает его на ноль , потому что он никогда не запускает код в моем операторе if / else, который проверяет, является ли someDouble IsNot Nothing ..., что плохо, потому что переменная может законно хранить 0 как действительный фрагмент данных.

Что мне здесь не хватает? Спасибо!

РЕДАКТИРОВАТЬ: я исключил, что я использовал свойства в классе для Get и Set этих значений. Оказывается, я все делал правильно, за исключением того, что я оставил свой тип Property как Double вместо Double?, поэтому он возвращался к нулю вместо значения Nothing. Полезная информация еще в ответах ниже, хотя!

Ответы [ 2 ]

7 голосов
/ 03 января 2012

вы должны прочитать Nullable Structure в MSDN

это объяснит, как его использовать

пример:

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
4 голосов
/ 03 января 2012

Хотя я не знаю, что вызывает ваши проблемы с «Nothing», вы также можете использовать «Double.NaN» (не число). Это также не потребовало бы специального "Double?" декларация.

...