W Visual Basic przekształcenia typów dzielą się na jawne i niejawne:
CInt(), CDbl(), CStr(), DirectCast, TryCast itp.Dla niezawodności zaleca się:
Option Strict On — to zabrania niejawnych przekształceń, wymagając jawnych konwersji i zapobiegając błędom w czasie wykonywania.Przykład:
Option Strict On Dim a As Integer Dim b As Double = 4.5 'a = b ' Błąd kompilacji! a = CInt(b) ' Poprawnie: Jawne przekształcenie z możliwą utratą części dziesiętnej 'Przekształcenie ciągów Dim s As String = "123" Dim n As Integer = Integer.Parse(s)
Jakie ryzyka wiążą się z używaniem funkcji Val() do przekształcania ciągu w liczbę, i dlaczego często jest ona odradzana?
Odpowiedź:
Val() przekształca tylko cyfrowy początek ciągu do pierwszego niecyfrowego znaku. Jeśli ciąg zaczyna się od litery lub znaku specjalnego, zwraca 0. Może to ukrywać błędy, jeśli oczekiwano przekształcenia całej wartości.
Przykład:
Dim value1 = Val("123abc") ' da 123 Dim value2 = Val("abc123") ' da 0 ! ' Lepiej użyć: Integer.TryParse("abc123", val)
Historia
W systemie ERP z bazy danych odczytywane były wartości, a z powodu niejawnego przekształcenia ciągu na Integer bez weryfikacji wyrzucało wyjątek przy niepoprawnych danych. To zatrzymało działanie całego modułu raportowania.
Historia
Przy integracji z przestarzałym systemem programista użył Val do przekształcania ciągów, a część ciągów zaczynała się od liter (np. "A1234"). Efekt — utrata identyfikatorów, które błędnie interpretowano jako 0, i awaria w działaniu lojalności klientów.
Historia
Programista użył DirectCast podczas rzutowania obiektów, nie sprawdzając zgodności typów. Przy przybyciu obiektu nietypowego typu wyrzucono InvalidCastException i zerwano łańcuch przetwarzania danych.