Проверить строку в массиве

У меня есть строки, хранящиеся в массиве, и мне нужно проверить, является ли 5-й символ каждой строки число или нет. Код, который я использовал:

If Mid(arr(i), 5, 1) = IsNumeric(True) Then
      MsgBox("Number")
End If

Это дает ошибку:

Произошло необработанное исключение типа "System.InvalidCastException" в Microsoft.VisualBasic.dll

Дополнительная информация: Преобразование из строки "" в тип "Boolean" недопустимо.

3 ответа

Вы изначально пометили свой вопрос как VBA, но VBA не выбрасывает System.InvalidCastException или любое другое исключение по этому вопросу; vb.net делает.

IsNumeric(True) возвращается True если True является числовым Вы хотите проверить, является ли строка, извлеченная из массива, числовой; передайте ему строку, извлеченную из массива в качестве параметра:

If IsNumeric(Mid(arr(i), 4, 1)) Then
    MsgBox("Number")
End If

Ваш код читается как VB6/VBA, хотя, из-за этого:

Imports Microsoft.VisualBasic

Это пространство имен содержит VB6-подобные вещи, которые вам вообще не нужны. Прелесть.net в том, что все является объектом, поэтому предположим, что массив - это массив String Вы можете назвать фактический String методы экземпляра вместо VB6 Mid функция.

Dim theFifthCharacter As String = arr(i).Substring(4, 1)

Или, потому что вас интересует только 1 символ и String само по себе IEnumerable(Of Char), вы можете сделать это:

Dim theFifthCharacter As Char = arr(i)(4)

Обратите внимание, что индексы off-one-in .net начинаются с 0, поэтому, если вам нужен 5-й элемент, вы получите индекс 4.

Теперь, если вы хотите увидеть, является ли он числовым, вы можете попытаться разобрать его:

Dim digitValue As Integer
If Int32.TryParse(theFifthCharacter, digitValue) Then
    'numeric: digitValue contains the numeric value
Else
    'non-numeric: digitValue contains an Integer's default value (0)
End If

Наконец, если вы хотите окно сообщения, используйте WinForms MessageBox вместо VB6 MsgBox:

Dim digitValue As Integer
If Int32.TryParse(theFifthCharacter, digitValue) Then
    'numeric: digitValue contains the numeric value
    MessageBox.Show(string.Format("Number: {0}", digitValue))
Else
    'non-numeric: digitValue contains an Integer's default value (0)
    MessageBox.Show("Not a number")
End If

Более правильный способ сделать это будет:

If Char.IsDigit(arr(i)(4)) Then

Ваш синтаксис неверен. Так должно быть:

If IsNumeric(Mid(arr(i), 5, 1)) Then
Другие вопросы по тегам