Ваш заголовок (и тег) спрашивает о «int», но ваш вопрос говорит, что вы получаете ошибку с «десятичным».В любом случае, не существует такого понятия, как «пустой», когда речь идет о типе значения (например, Integer
, Decimal
и т. Д.).Они не могут быть установлены на Nothing
, как вы могли бы с ссылочным типом (например, String
или класс).Вместо этого типы значений имеют неявный конструктор по умолчанию, который автоматически инициализирует ваши переменные этого типа к его значению по умолчанию. Для числовых значений, таких как Integer
и Decimal
, это 0. Для других типов см. эта таблица .
Таким образом, вы можете проверить, был ли тип значения инициализирован с помощью следующего кода:
Dim myFavoriteNumber as Integer = 24
If myFavoriteNumber = 0 Then
''#This code will obviously never run, because the value was set to 24
End If
Dim mySecondFavoriteNumber as Integer
If mySecondFavoriteNumber = 0 Then
MessageBox.Show("You haven't specified a second favorite number!")
End If
Обратите внимание, что mySecondFavoriteNumber
автоматически инициализируется как0 (значение по умолчанию для Integer
) за кулисами компилятора, поэтому оператор If
равен True
.На самом деле, объявление mySecondFavoriteNumber
выше эквивалентно следующему утверждению:
Dim mySecondFavoriteNumber as Integer = 0
Конечно, как вы, наверное, заметили, нет способа узнать, является ли любимый номер человека на самом деле 0, или если они просто еще не указали любимый номер. Если вам действительно нужен тип значения, который можно установить на Nothing
, вы можете использовать Nullable(Of T)
, объявив переменную вместо:
Dim mySecondFavoriteNumber as Nullable(Of Integer)
И проверяем, было ли оно назначено следующим образом:
If mySecondFavoriteNumber.HasValue Then
''#A value has been specified, so display it in a message box
MessageBox.Show("Your favorite number is: " & mySecondFavoriteNumber.Value)
Else
''#No value has been specified, so the Value property is empty
MessageBox.Show("You haven't specified a second favorite number!")
End If