Visual Basic'te veriler genellikle kullanıcı tarafından dizeler olarak girilir (örneğin, TextBox veya InputBox üzerinden), ancak daha fazla işlem yapmak için bunları sayısal tiplere dönüştürmek gereklidir. VB'nin eski sürümlerinde, Val veya CInt üzerinden sıkı olmayan dönüşüm kullanılıyordu, bu da hatalı verilere bağlı açık ve örtük hatalara neden oluyordu. Dizenin her zaman doğru bir değeri içerdiği varsayılıyordu, ancak pratikte kullanıcılar genellikle hatalı karakterler girer, bu da hatalara veya yanlış dönüşümlere yol açar.
Sorun, dönüşümün korumasızlığıdır; bu durum, uygulamanın çökmesine veya yanlış hesaplamalara yol açabilir. Örneğin, Val("1a") 1 döndürecektir, bu da beklenmedik olabilir. TryParse kullanımının yanı sıra, giriş formatının sıkı bir şekilde kontrol edilmesi, bu tür hataların önlenmesine ve girişi doğru bir şekilde işlemeye olanak tanır.
Çözüm, Integer.TryParse (veya Double.TryParse vb.) yönteminin kullanılmasıdır; bu metod sadece dönüşüm başarılı olduğunda True döndürür.
Kod örneği:
Dim input As String = TextBox1.Text Dim value As Integer If Integer.TryParse(input, value) Then ' Geçerli bir sayı girildi, value değişkeni değer içerir Else MessageBox.Show("Lütfen tam sayı girin") End If
Ana özellikler:
Kullanıcı girişini işleme sırasında Val fonksiyonu neden tehlikelidir?
Val, geçersiz ilk karaktere kadar sayısal bir değer döndürür ve hata fırlatmaz, bu da hatalı mantıklara yol açabilir.
Dim n = Val("12abc") ' 12 döndürecek, oysa dize geçersiz
CInt ile Integer.Parse arasındaki fark nedir?
CInt, bankacı yuvarlaması ile yuvarlama yapar; Integer.Parse ise dizeyi sayıyla tam eşleşmesini gerektirir ve hata olduğunda istisna fırlatır.
Neden TryParse "1,234" dizesi için her zaman True döndürmez?
Sonuç, Windows'un bölgesel ayarlarına bağlıdır: bazı yerlerde ondalık ayırıcı virgül, bazı yerlerde nokta olur. Formatı açıkça belirtmek önemlidir:
Dim number As Double Double.TryParse("1,234", NumberStyles.Any, CultureInfo.InvariantCulture, number)
Finansal modül, InputBox üzerinden verileri alıyordu, Val ile dönüştürüyordu; 10,5 sayısı bazı durumlarda 10 oluyordu (virgül tanınmıyordu ve nokta girilmiyordu).
Artılar:
Eksiler:
Kültürel ayarlara ve giriş alanı doğrulamasına dikkat ederek TryParse'a geçiş.
Artılar:
Eksiler: