В Visual Basic преобразования типов бывают явные и неявные:
CInt(), CDbl(), CStr(), DirectCast, TryCast и др.Для надежности рекомендуется:
Option Strict On — это запрещает неявные преобразования, требуя явных конвертаций и предотвращая ошибки времени выполнения.Пример:
Option Strict On Dim a As Integer Dim b As Double = 4.5 'a = b ' Ошибка компиляции! a = CInt(b) ' Корректно: Явное преобразование с возможной потерей дробной части 'Преобразование строк Dim s As String = "123" Dim n As Integer = Integer.Parse(s)
Какие риски связаны с использованием функции Val() для преобразования строки в число, и почему её часто не рекомендуют?
Ответ:
Val() преобразует только цифровое начало строки до первого нечислового символа. Если строка начинается с буквы или спецсимвола, возвращает 0. Это может скрывать ошибки, если ожидалось преобразование всего значения.
Пример:
Dim value1 = Val("123abc") ' даст 123 Dim value2 = Val("abc123") ' даст 0 ! ' Лучше использовать: Integer.TryParse("abc123", val)
История
В ERP-системе из базы данных читались значения, и из-за неявного преобразования строки в Integer без проверки выбрасывалось исключение при некорректных данных. Это остановило работу всего модуля отчетности.
История
При интеграции с устаревшей системой, программист использовал Val для преобразования строк, а часть строк начиналась с букв (например, "A1234"). Итог — потеря идентификаторов, которые неправильно интерпретировались как 0, и сбой в работе лояльности клиентов.
История
Разработчик использовал DirectCast при приведении объектов, не проверяя совместимость типов. При приходе объекта неожиданного типа, выбросилось InvalidCastException и сломалась цепочка обработки данных.