【问题标题】:VB.NET Cannot get Integer from StringVB.NET 无法从字符串中获取整数
【发布时间】:2015-03-22 21:53:31
【问题描述】:

这真的很奇怪:

Dim i As Integer
Dim s As String = "48;55;50"
Dim numbers() As String = Split(s, ";")
For Each number In numbers
    i = Integer.Parse(number)
Next

这适用于数字中的第一项 (48),但不适用于第二个数字 (55)。我得到一个 FormatException。

尝试使用 CInt 而不是 Integer.Parse。甚至尝试使用 s.Split 而不是 Split。

我真的不明白。谢谢:)

【问题讨论】:

  • 您是否尝试在分配i 的行上设置断点?
  • 是的,我做到了。检查所有变量。这根本没有意义。
  • 遇到断点时numbercontain 做了什么?
  • 首先 i 设置为 0(默认)。然后是第一次运行后的48。
  • 但是number 包含什么?

标签: .net vb.net parsing


【解决方案1】:

另一个解决方案是在System.Text.RegularExpressions 命名空间中使用Split 方法,如果你真的觉得:

Dim s As String = "23;43;34"

For Each num As String In Regex.Split(s, ";")
    Console.WriteLine(Integer.Parse(num))
Next

在少量数据上,不应该有任何性能差异,所以这取决于你。

【讨论】:

    【解决方案2】:

    它必须为你工作(RemoveEmptyEntries)

    Dim i As Integer
    Dim s As String = "48;55;50;"
    Dim separator As Char() = ";"
    Dim numbers As String() = s.Split(separator, System.StringSplitOptions.RemoveEmptyEntries)
    For Each number In numbers
        i = Integer.Parse(number, System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture)
    Next
    

    【讨论】:

    • 编码过多 - OP 的代码在正确设置的系统上按编写方式工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    相关资源
    最近更新 更多