Nul*_*ark 2 .net vb.net try-catch winforms
我正在编写一个简单的应用程序,它将来自2个文本框的输入作为分子和分母,然后将它们传递给Reduce()方法.
我需要将文本框字符串转换为整数,但如果用户不小心键入非数字键,我不希望它停止程序,所以我将赋值放在Try ... Catch语句中以防止从发生.
但是,当我在2个文本框中键入字母并按下按钮时,窗口就会冻结并且全部搞乱.谁能解释一下发生了什么?
这是我的代码:
Private Sub btnReduce_Click(ByVal sender As Object,
ByVal e As EventArgs) Handles btnReduce.Click
Dim n As Integer
Dim d As Integer
Try
n = Val(txtNum.Text)
Catch ex As Exception
MsgBox("Please enter a numeric numerator", , "ERROR")
Exit Sub
End Try
Try
d = Val(txtDenom.Text)
Catch ex As Exception
MsgBox("Please enter a numeric denominator", , "ERROR")
Exit Sub
End Try
Reduce(n, d)
Dim reduced As String = n.ToString + "/" + d.ToString
lblDisplay.Text = "The reduced fraction is " + reduced
End Sub
Run Code Online (Sandbox Code Playgroud)
而不是一个Try/Catch或Val使用Integer.TryParse(或其他类型).问题是Val如果不好就不会抛出异常.它将返回任何前导数字的值:
n = Val("abc") ' == 0.0
n = Val("1a2b3c") ' == 1.0
Run Code Online (Sandbox Code Playgroud)
它也总是返回一个Double,所以如下:
Dim n As Integer
n = Val(txtNum.Text)
Run Code Online (Sandbox Code Playgroud)
...是无效代码Option Strict- 您正在尝试将Double分配给整数.
Dim n As Integer
Dim d As Integer
' if it can parse a value, it will be stored in n
If Integer.TryParse(txtNum.Text, n) = False Then
MsgBox("Please enter a numeric numerator", , "ERROR")
Exit Sub
End If
If Integer.TryParse(txtDenom.Text, d) = False Then
MsgBox("Please enter a numeric numerator", , "ERROR")
Exit Sub
End If
Reduce(n, d)
...
Run Code Online (Sandbox Code Playgroud)
其中一个好处*.TryParse()是它可以通过返回a 来避免异常Boolean.例外不适用于流控制或数据验证,这是您的代码尝试使用它们的方式.
一般来说,最好避免使用那些遗留的VB函数Val,Mid而不是那些通常更强大,更灵活,更好键入的.NET对应函数.
此外,打开Option Strict- 它会将许多运行时错误和怪异的错误转换为编译器错误,指出行/问题.例如,它可能实际上并没有停留在该方法中,而是稍后在某处使用错误值时.
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |