VB.NET项目启用Option Strict On后遇BC32013错误,替换Is仍无效
解决Option Strict On下的BC32013错误及Is运算符误用问题
问题根源
你遇到的BC32013错误是因为Option Strict On禁止直接对Object类型使用=运算符,但错误提示里的Is运算符是用来判断对象引用是否相同,而非值相等——你的代码实际要比较的是单元格值和文本框内容的值是否一致,用Is自然会失效,因为单元格的Value(Object类型)和文本框的Text(String类型)是两个不同的对象实例,哪怕内容相同,Is也会返回False。
正确解决方案
需要先将单元格的Value转换为明确的类型(比如String,和文本框的Text类型匹配),再进行值比较,同时要处理单元格值可能为DBNull或Nothing的情况,避免转换异常。
方案1:基础类型转换(确定单元格值为字符串且非空)
' 先将单元格Value转换为String类型 Dim cellValue As String = CStr(dtg_FieldSelector.Rows(m_int_SelectedRow).Cells(0).Value) ' 直接用=比较字符串值 If cellValue = txt_FieldIndex.Text Then ' 你的业务逻辑 End If
方案2:安全处理空值场景
如果单元格可能为空(DBNull或Nothing),用If运算符做默认值处理,再用String.Equals做更严谨的比较:
' 处理DBNull或空值,转为空字符串 Dim cellValue As String = If(dtg_FieldSelector.Rows(m_int_SelectedRow).Cells(0).Value Is DBNull.Value, "", CStr(dtg_FieldSelector.Rows(m_int_SelectedRow).Cells(0).Value)) ' 指定字符串比较规则(比如Ordinal区分大小写,OrdinalIgnoreCase不区分) If cellValue.Equals(txt_FieldIndex.Text, StringComparison.Ordinal) Then ' 你的业务逻辑 End If
方案3:用TryCast避免转换失败
如果不确定单元格值是否为String类型,用TryCast安全转换,避免类型转换异常:
' 尝试将Value转换为String,失败则返回Nothing Dim cellValue As String = TryCast(dtg_FieldSelector.Rows(m_int_SelectedRow).Cells(0).Value, String) ' 先判断非空,再比较值 If cellValue IsNot Nothing AndAlso cellValue = txt_FieldIndex.Text Then ' 你的业务逻辑 End If
内容的提问来源于stack exchange,提问作者Terabithia
相关产品推荐
相关产品推荐

