Vb.net 检查数组中的字符串

Vb.net 检查数组中的字符串,vb.net,isnumeric,vba,Vb.net,Isnumeric,Vba,我将字符串存储在数组中,需要检查每个字符串的第5个字符是否为数字。我使用的代码是: If Mid(arr(i), 5, 1) = IsNumeric(True) Then MsgBox("Number") End If 它给出了一个错误: Microsoft.VisualBasic.dll中发生类型为“System.InvalidCastException”的未处理异常 其他信息:从字符串“”到类型“Boolean”的转换无效 你的语法不正确。应该是: If I

我将字符串存储在数组中,需要检查每个字符串的第5个字符是否为数字。我使用的代码是:

If Mid(arr(i), 5, 1) = IsNumeric(True) Then
      MsgBox("Number")
End If
它给出了一个错误:

Microsoft.VisualBasic.dll中发生类型为“System.InvalidCastException”的未处理异常

其他信息:从字符串“”到类型“Boolean”的转换无效


你的语法不正确。应该是:

If IsNumeric(Mid(arr(i), 5, 1)) Then

更正确的方法是:

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

您最初将问题标记为,但VBA不会抛出System.InvalidCastException或任何其他异常;是的

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个字符感兴趣,而
字符串本身就是
IEnumerable(Of Char)
,所以可以执行以下操作:

Dim theFifthCharacter As Char = arr(i)(4)
请注意.net索引中的off by one从0开始,因此如果您想要第5项,您将获取索引4

现在,如果要查看它是否为数字,可以尝试解析它:

最后,如果需要消息框,请使用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

从字符串“”到类型“Boolean”的转换无效。
是一个直接的问题。您正在将一个
布尔值
传递给函数(true),而不是可以作为数字计算的对象。。。这才是你真正的问题。同时将
选项严格设置为
,这是你的朋友..@Zaggler的问题之一。我知道,但这就是错误所在。当这是解决他有更多。。。鉴于这是一个惯用的.net代码,在
Microsoft.VisualBasic
名称空间中没有使用VB6垃圾,我很好奇这里的否决理由是什么。使用
Char.IsDigit()
允许某些字符返回true,甚至不在正确的ASCII范围内。我的意见是,
Integer.TryParse
是一种更好的方法,确保它肯定在0-9之间。。。另外,解释OP为什么会有这个错误也很有用,这样OP就可以理解问题了。@Zaggler,我认为你把
Char.IsDigit
Char.IsNumber
混淆了。根据文档,
IsDigit
将只匹配0-9.Char.IsDigit是Char.IsNumber的子集。。。根据环境的不同,一些泰国符号返回为数字,这是错误的。。IsDigit可能很有用,但同时它在案例中不起作用。非常好的解释和细节!
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