Arrays 将字符串拆分为数组时出错

Arrays 将字符串拆分为数组时出错,arrays,vb.net,string,Arrays,Vb.net,String,基本上,我不能修剪它,除非它在一个消息框。。这很难解释。 以下是两张图片: 1. 2. 这很有效^^^^ 这并不是: Dim value As String = ary(0).Trim() this is the error---> Dim value1 As String = ary(1).Trim() Dim R As String Dim G As String Dim B As String

基本上,我不能修剪它,除非它在一个消息框。。这很难解释。 以下是两张图片: 1. 2.

这很有效^^^^

这并不是:

        Dim value As String = ary(0).Trim()
       this is the error---> Dim value1 As String = ary(1).Trim()

        Dim R As String
        Dim G As String
        Dim B As String

        Dim outline As String
        Dim outlineColor As String


        R = Chr(34) & "MouseColorR" & Chr(34)
        G = Chr(34) & "MouseColorG" & Chr(34)
        B = Chr(34) & "MouseColorB" & Chr(34)

        outline = Chr(34) & "ThickMouseEdges" & Chr(34)
        outlineColor = Chr(34) & "ThickMouseEdgesPackedColor" & Chr(34)
        'based on the value after the equals sign, do something



        If value = R Then
            MsgBox(ary(1).Trim(Chr(44)))

        ElseIf value = G Then
            MsgBox("finally")

        ElseIf value = B Then
            MsgBox("finally")

        ElseIf value = outline Then
            MsgBox("finally")

        ElseIf value = outlineColor Then
            MsgBox("finally")
错误是:Terraria Smart Cursor.exe中发生类型为“System.IndexOutOfRangeException”的未处理异常

附加信息:索引超出了数组的边界

全部代码:

公开课表格1

Private Sub NsCheckBox1_CheckedChanged(sender As Object) Handles NsCheckBox1.CheckedChanged

    NsGroupBox2.Enabled = NsCheckBox1.Checked

End Sub

Private Sub NsTrackBar1_Scroll(sender As Object) Handles NsTrackBar1.Scroll
    NsLabel4.Value1 = NsTrackBar1.Value
End Sub

Private Sub NsTrackBar2_Scroll(sender As Object) Handles NsTrackBar2.Scroll
    NsLabel5.Value1 = NsTrackBar2.Value
End Sub

Private Sub NsTrackBar3_Scroll(sender As Object) Handles NsTrackBar3.Scroll
    NsLabel6.Value1 = NsTrackBar3.Value
End Sub

Private Sub NsTrackBar6_Scroll(sender As Object) Handles NsTrackBar6.Scroll
    NsLabel9.Value1 = NsTrackBar6.Value
End Sub

Private Sub NsTrackBar5_Scroll(sender As Object) Handles NsTrackBar5.Scroll
    NsLabel8.Value1 = NsTrackBar5.Value
End Sub

Private Sub NsTrackBar4_Scroll(sender As Object) Handles NsTrackBar4.Scroll
    NsLabel7.Value1 = NsTrackBar4.Value
End Sub

Private Sub NsButton1_Click_1(sender As Object, e As EventArgs) Handles NsButton1.Click
    If ColorDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
        NsLabel4.Value1 = ColorDialog1.Color.R
        NsLabel5.Value1 = ColorDialog1.Color.G
        NsLabel6.Value1 = ColorDialog1.Color.B

        NsTrackBar1.Value = NsLabel4.Value1
        NsTrackBar2.Value = NsLabel5.Value1
        NsTrackBar3.Value = NsLabel6.Value1
    End If
End Sub

Private Sub NsButton2_Click_1(sender As Object, e As EventArgs) Handles NsButton2.Click
    If ColorDialog2.ShowDialog() = Windows.Forms.DialogResult.OK Then
        NsLabel9.Value1 = ColorDialog2.Color.R
        NsLabel8.Value1 = ColorDialog2.Color.G
        NsLabel7.Value1 = ColorDialog2.Color.B

        NsTrackBar6.Value = NsLabel9.Value1
        NsTrackBar5.Value = NsLabel8.Value1
        NsTrackBar4.Value = NsLabel7.Value1
    End If
End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'reads each line from the text file one at a time
    For Each line As String In IO.File.ReadLines("C:\Users\Matthew\Documents\My Games\Terraria\config.json")


        'split the string by equals sign
        Dim ary As String() = line.Split(":")


        Dim value As String = ary(0).Trim()
        Dim value1 As String = ary(1).Trim()

        Dim R As String
        Dim G As String
        Dim B As String

        Dim outline As String
        Dim outlineColor As String


        R = Chr(34) & "MouseColorR" & Chr(34)
        G = Chr(34) & "MouseColorG" & Chr(34)
        B = Chr(34) & "MouseColorB" & Chr(34)

        outline = Chr(34) & "ThickMouseEdges" & Chr(34)
        outlineColor = Chr(34) & "ThickMouseEdgesPackedColor" & Chr(34)
        'based on the value after the equals sign, do something



        If value = R Then
            MsgBox(ary(1).Trim(Chr(44)))

        ElseIf value = G Then
            MsgBox("finally")

        ElseIf value = B Then
            MsgBox("finally")

        ElseIf value = outline Then
            MsgBox("finally")

        ElseIf value = outlineColor Then
            MsgBox("finally")

        End If



    Next
End Sub

End Class

您正在访问一个容器,该容器在位置0处工作,然后在位置1处不工作。屏幕截图中显示的异常表示这是一个超出范围的问题。因此,您的容器没有预期的大:它只有1个元素。

您正在通过Dim ary以String=line的形式填充ary。拆分:。您正在阅读C:\Users\Matthew\Documents\My Games\Terraria\config.json中的每一行

该文件的一行不包含:。因此,拆分只创建一个元素数组。当你打电话时:

Dim value1 As String = ary(1).Trim()
由于元素1不存在,您将获得ArgumentOutOfRangeException


解决方案是测试数组长度,让代码以优雅的方式处理不带:的行。

请以代码的形式发布一个简短但完整的示例。这里没有理由使用图像。很容易解释:你将代码粘贴到你的问题中,说你正在获取ArgumentOutOfRangeException,并说它发生在哪一行。这仍然不是一个简短但完整的示例。它既不短也不完整,也没有告诉我们您要拆分哪个值。还不清楚为什么在没有C的情况下用C标记此变量。请阅读您的ary变量仅包含元素0,而不包含元素1。因此,您粘贴的代码不是问题的原因;它发生得更早,假设您甚至需要value1,不管它是什么;请在你的代码中使用有意义的变量名,因为到目前为止,你不会在你发布的内容中使用它。现在我所有的代码都有了…如果value=R,那么MsgBoxary1.TrimChr44 end如果value不等于R的情况如何?R、G、B都是我关心的。。其他什么都不重要。。此外,除变量外,所有3个变量的代码都是相同的。后一个代码有效,因为只有当value=R时才测试ary1。前一个代码失败,因为即使在value不等于R的情况下也可以访问ary1。因此,如果我想在不删除这些括号的情况下修复此问题。。我该怎么做?编辑:Nvm我知道如何。。只需在Try函数中声明它
Dim value1 As String = ary(1).Trim()