Visual Basic'de tür dönüştürmeleri açık ve örtük olarak ikiye ayrılır:
CInt(), CDbl(), CStr(), DirectCast, TryCast gibi operatörler kullanılarak gerçekleştirilir.Güvenilirlik için öneriler:
Option Strict On kullanın — bu, örtük dönüşümleri yasaklar, açık dönüşümleri zorunlu kılar ve çalışma zamanı hatalarını önler.Örnek:
Option Strict On Dim a As Integer Dim b As Double = 4.5 'a = b ' Derleme hatası! a = CInt(b) ' Doğru: Kesin dönüşüm ile muhtemel ondalık kaybı 'Strek dönüşümü Dim s As String = "123" Dim n As Integer = Integer.Parse(s)
Val() işlevinin bir dizeyi sayıya dönüştürme ile ilgili riskleri nelerdir ve neden sıkça önerilmez?
Cevap:
Val() bir dizedeki sayısal başlangıcı, ilk sayısal olmayan sembole kadar dönüştürür. Dizi bir harf veya özel simge ile başlıyorsa, 0 döner. Bu, beklenen tüm değerin dönüşümünü gizleyebileceği için hataları gizleyebilir.
Örnek:
Dim value1 = Val("123abc") ' 123 verir Dim value2 = Val("abc123") ' 0 verir! ' Daha iyi: Integer.TryParse("abc123", val)
Hikaye
Bir ERP sisteminde veritabanından okunan değerler, kontrol edilmeden Integer'a örtük dönüşüm yapıldığı için hatalı verilerde istisna fırlatıyordu. Bu, raporlama modülünün çalışmasını durdurdu.
Hikaye
Eski bir sistemle entegrasyonda, programcı dizeleri dönüştürmek için Val kullandı ve bazı dizeler harflerle başlıyordu (örneğin, "A1234"). Sonuç — yanlış yorumlanan 0 olarak kaybolan tanıtıcılar ve müşteri sadakatinde aksaklık.
Hikaye
Geliştirici, nesneleri dönüştürürken DirectCast kullandı ve tür uyumluluğunu kontrol etmedi. Beklenmeyen türde bir nesne geldiğinde, InvalidCastException fırlatıldı ve veri işleme zinciri kırıldı.