我有一个存储在数组中的字符串,需要检查每个字符串的第5个字符是否为数字。我使用的代码是:
If Mid(arr(i), 5, 1) = IsNumeric(True) Then
MsgBox("Number")
End If
发出错误:
未处理的类型' System.InvalidCastException'发生在Microsoft.VisualBasic.dll
其他信息:从字符串转换""输入'布尔'无效。
答案 0 :(得分: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的{{ 1}}功能。
Mid
或者,因为您只对1个字符感兴趣,而Dim theFifthCharacter As String = arr(i).Substring(4, 1)
本身就是String
,您可以这样做:
IEnumerable(Of Char)
请注意,off-by-one-in .net索引从0开始,所以如果你想要第5项,你将获取索引4。
现在,如果您想查看它是否为数字,您可以尝试 解析:
Dim theFifthCharacter As Char = arr(i)(4)
最后,如果你想要一个消息框,请使用WinForms'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
而不是VB6的MessageBox
:
MsgBox
答案 1 :(得分:1)
更正确的方法是:
If Char.IsDigit(arr(i)(4)) Then
答案 2 :(得分:0)
您的语法不正确。它应该是:
If IsNumeric(Mid(arr(i), 5, 1)) Then