VB Проверить, если int пусто - PullRequest
8 голосов
/ 22 ноября 2010

Действительно скучный вопрос, извините, но я действительно этого еще не знаю;) Я всегда пробовал string.empty, но с десятичной дробью это приводит к ошибке.

Есть ли какая-нибудь функция? К сожалению, на самые простые вопросы нет ответов на Google

Ответы [ 3 ]

18 голосов
/ 22 ноября 2010

Ваш заголовок (и тег) спрашивает о «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
3 голосов
/ 22 ноября 2010

Может быть, вы ищете Nullable

    Dim foo As Nullable(Of Integer) = 1
    Dim bar As Nullable(Of Decimal) = 2

    If foo = 1 Then
        If bar = 2 Then
            foo = Nothing
            bar = Nothing
            If foo Is Nothing AndAlso bar Is Nothing Then Stop
        End If
    End If
0 голосов
/ 22 ноября 2010

Ну, значение по умолчанию для числа будет 0, но вы также можете попробовать это:

int x = 123;
String s = "" + x; 

, а затем проверьте длину или, если строка 's' пуста.

...