为什么这个CInt函数调用*不*抛出错误?

时间:2015-03-12 13:58:43

标签: vb.net

我很好奇,真的。

有些代码在转换之前没有处理空字符串,实质上是调用

Dim StringToConvert As String = ""
Dim a As Integer = CInt(StringToConvert)

而不是

Dim StringToConvert As String = ""
Dim a As Integer = CInt("0" & StringToConvert)

所以它会引发错误......

我不明白的是,当我调试时,并非在我的机器上抛出错误。但在编译时会抛出错误!

以下是调用CInt函数的内容,有时只会抛出错误:

Public NotInheritable Class SomeForm
    Inherits Windows.Forms.Form

    Private Sub TextBox_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles TextBox.LostFocus
        StaticHolderClass.StaticMethod(DirectCast(sender,TextBoxBase))
    End Sub

End Class

Public NotInheritable Class StaticHolderClass

    Public Shared Sub StaticMethod(ByVal sender As Windows.Forms.TextBoxBase)
        sender.Text = Format(CInt(sender.Text),"#,#")
    End Sub

End Class

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:2)

在VB中,有时在表单初始化期间遇到错误时,它不会被正确报告。有时,错误根本不会被标记,有时它似乎来自不同的位置。例如,在下面的代码中(在我的系统上),单击按钮而不是表单加载会引发错误:

Public Class Form1
Dim k As Integer

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
k = CInt("")
End Sub

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
k = CInt("")
End Sub

End Class

这似乎取决于环境,所以"您的结果可能会有所不同"。您有时可以通过使用显示的事件而不是加载来解决此问题。