【问题标题】:Check string in an array检查数组中的字符串
【发布时间】:2017-01-24 02:16:07
【问题描述】:

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

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

报错:

Microsoft.VisualBasic.dll 中出现“System.InvalidCastException”类型的未处理异常

附加信息:从字符串“”到类型“布尔”的转换无效。

【问题讨论】:

  • Conversion from string "" to type 'Boolean' is not valid. 是一个直截了当的问题。您正在将boolean 传递给函数(true),而不是可以评估为数字的对象......这是您真正的问题。也转Option Strict On,是你的朋友..
  • @Zaggler 这是一个的问题。
  • 我知道,但这就是错误。当解决这个问题时,他有更多...... ????

标签: vb.net isnumeric


【解决方案1】:

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

如果True 是数字,则IsNumeric(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)

请注意 .net 中的一对一索引从 0 开始,因此如果您想要第 5 个项目,您将获取索引 4。

现在,如果你想看看它是否是数字,你可以try解析它:

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

【讨论】:

  • 很好的解释和细节!
【解决方案2】:

更正确的方法是:

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

【讨论】:

  • 看到这是惯用的 .net 代码,它没有在 Microsoft.VisualBasic 命名空间中使用 VB6 垃圾,我很好奇这里可能会被否决的原因是什么。
  • 使用Char.IsDigit() 允许某些字符返回true,它们甚至不在正确的ASCII 范围内。我的观点,Integer.TryParse 是一种更好的方法,确保它肯定落在 0-9 之间......同时解释为什么 OP 有这个错误会很有用,以便 OP 可以理解问题。
  • @Zaggler,我认为您将Char.IsDigitChar.IsNumber 混淆了。根据文档,IsDigit 只会匹配 0 - 9。
  • Char.IsDigit 是 Char.IsNumber 的一个子集...并且根据环境,一些泰语符号返回为数字,这是错误的.. IsDigit 可能有用,但同时它没有以防万一。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    相关资源
    最近更新 更多