사용자 입력 처리에서, 사용자가 예를 들어 TextBox에 숫자가 아닌 값을 입력할 때 타입 변환 오류를 방지하는 것이 중요합니다. 이는 애플리케이션의 안정성을 보장하는 데 필요합니다.
질문 배경:
VB6 및 VB.NET에서 CInt 또는 Val과 같은 변환 오류는 치명적인 문제를 일으킬 수 있었습니다. 나중에 Integer.TryParse와 같은 더 안전한 방법이 등장했습니다.
문제:
잘못된 데이터(문자, 특수 기호, 빈 문자열)를 변환하려고 하면, 표준 방법(CInt, CDbl)은 예외를 발생시킵니다. 이로 인해 애플리케이션이 비정상 종료될 수 있습니다.
해결책:
안전한 변환을 위해 TryParse를 사용하십시오. 이는 문자열을 숫자로 변환할 때의 논리적 성공을 반환하고 예외를 방지합니다.
코드 예:
Dim input As String = TextBox1.Text Dim number As Integer If Integer.TryParse(input, number) Then MessageBox.Show($"입력한 숫자: {number}입니다") Else MessageBox.Show("오류: 숫자가 아닙니다") End If
주요 특징:
TryParse는 실패할 때 예외를 발생시키지 않습니다Val("123abc") 함수는 무엇을 반환하며, 이것이 왜 위험할 수 있나요?
Val("123abc")는 123을 반환하고 숫자 뒤의 비숫자 기호를 무시합니다. 이는 사용자가 실수로 추가 문자를 입력할 경우 오류를 초래할 수 있습니다.
CInt("")로 빈 문자열을 변환할 수 있나요?
아니요, 함수는 InvalidCastException 예외를 발생시킵니다.
로컬라이징을 고려한 부동 소수점 숫자 변환을 위해 어떤 접근 방식을 선택해야 하나요?
Double.TryParse와 CultureInfo를 사용하는 것이 좋습니다. 일부 지역에서는 ,가 소수 부분 구분자이고, 다른 지역에서는 .가 됩니다.
Dim value As Double Dim isParsed = Double.TryParse("3,14", NumberStyles.Any, CultureInfo.CurrentCulture, value)
Val 사용CInt 적용개발자가 검사 없이 텍스트를 숫자로 직접 변환합니다: Dim n = CInt(TextBox1.Text).
장점:
단점:
사용자가 잘못된 입력에 대해 통지를 받도록 TryParse를 사용합니다(위의 예 참조).
장점:
단점: