Проверить строку в массиве
У меня есть строки, хранящиеся в массиве, и мне нужно проверить, является ли 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