То, что вы не перехватываете ошибки с помощью Try ... Catch, не означает, что вам не нужно учитывать ложные данные пользователя.Следующий код должен избегать сбоев, проверяя входные данные на целые числа и длину строки.
Integer.TryParse (string, 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