我有一个示例代码,可以将数字转换为以N为底的数字。
我可以有2、3或4位数字。
我的功能正常运行,如下所示:
Private Function BaseN(s As String)
Dim d = Val(s(s.Length - 1))
Dim c = Val(s(s.Length - 2))
Dim a, b As Integer
Try
b = Val(s(s.Length - 3))
Catch
b = 0
End Try
Try
a = Val(s(s.Length - 4))
Catch
a = 0
End Try
Return (a * (n * n * n) + b * (n * n) + c * n + d + 1).ToString
End Function
但是出于某种原因,转换我的文本大约需要10秒钟。
我尝试过这种方式:
Private Function BaseN(s As String)
Dim d = Val(s(s.Length - 1))
Dim c = Val(s(s.Length - 2))
Dim a, b As Integer
b = 0
a = 0
Return (a * (n * n * n) + b * (n * n) + c * n + d + 1).ToString
End Function
这里的转换大致是即时的。
所以我想知道为什么try catch
这么长的运行时间,或者我是否对它们进行了错误的使用。
答案 0 :(得分:0)
仅仅因为您没有使用Try ... Catch捕获错误,并不意味着您不必考虑虚假的用户输入。以下代码应通过检查输入的整数和字符串长度来避免崩溃。
Integer.TryParse(string,integerVariable)将检查字符串以查看是否可以将其转换为Integer。它用字符串的Integer表示填充integerVariable。即使integerVariable失败,它也会为零,这使您的最终方程式有效。
我没有检查功能本身的有效性。
Private Function BaseN(s As String, n As Integer) As String
Dim StringLength As Integer = s.Length
Dim a, b, c, d As Integer
Select Case StringLength
Case 2
Integer.TryParse(s(StringLength - 1), d)
Integer.TryParse(s(StringLength - 2), c)
Case 3
Integer.TryParse(s(StringLength - 3), b)
Integer.TryParse(s(StringLength - 1), d)
Integer.TryParse(s(StringLength - 2), c)
Case 4
Integer.TryParse(s(StringLength - 4), a)
Integer.TryParse(s(StringLength - 3), b)
Integer.TryParse(s(StringLength - 1), d)
Integer.TryParse(s(StringLength - 2), c)
Case Else
Return ""
End Select
Return (a * (n * n * n) + b * (n * n) + c * n + d + 1).ToString
End Function