Заметочка о привединии типов

Ответы на вопросы, чаще всего задаваемые в форумах VBStreets. Для тех, кому лень искать.
ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Заметочка о привединии типов

Сообщение ANDLL » 30.05.2005 (Пн) 12:39

VisualBasic 6.0 довольно странно, на мой взгляд, производит стравнение строк и чисел. Странность эта, не столь очевидная для начинающих, может породить весьма трудноуловимые проблемы.

К примеру:
Код: Выделить всё
If "125"=125 Then Bepp

Данный код для программиста на C++ показался бы лишенным смысла, т.к. указатель не может равнятся 125. Однако VB совершенно спокойно компилирует этот код и успешно выполняет приведение типов. Все происходит замечательно.

Даже если четко указать типы переменных, все также происходит замечательно:
Код: Выделить всё
Dim A as String,B as Long
A="125"
B=125
If A=B Then Beep


Как видим VB успешно преобразовал строку в число. Теперь данный код может показаться странным:
Код: Выделить всё
Dim A,B
A="125"
B=125
If A=B Then Beep

Никто не знает, почему, но в данном случае VB, определив, что один переменная A - строка, а B - число, НЕ ВЫПОЛНЯЕТ ПРИВЕДЕНИЕ ТИПОВ, а сразу возвращает false. В итоге Вы не услышите звукового сигнала.


Вывод:

Не используйте переменные типа Variant, а если уж пришлось их использовать, то обязательно выполняйте явное преобразование типов:


Код: Выделить всё
Dim A,B
A="125"
B=125
If Clng(A)=Clng(B) Then Beep
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Вернуться в Популярные вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

    TopList  
cron