Vb.net 检查数组中的字符串
我将字符串存储在数组中,需要检查每个字符串的第5个字符是否为数字。我使用的代码是: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
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