비주얼 베이직에서 유형 변환은 명시적 및 암시적으로 나눌 수 있습니다:
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이 발생해 데이터 처리 체인이 중단되었습니다.