在 Visual Basic 中,类型转换分为 显式 和 隐式:
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,导致数据处理链断裂。