【问题标题】:Index was out of bounds. For Loops and Arrays索引超出范围。 For 循环和数组
【发布时间】:2009-11-23 03:17:00
【问题描述】:

我正在尝试创建两个数组,其中填充了来自数据库中两个表的一组字符串,然后比较它们。例如: array1[0]="1101"array2[0]="0110"

如果两个相应的字符都等于 1,则执行一个动作。但是当我运行此代码时,我收到错误:索引超出了数组的范围。 System.IndexOutOfRangeException。

出于某种原因,我认为问题区域在于以下两个陈述:

comparestringa = userintarray(x)comparestringb = eventintarray(x)

当我将它们注释掉时,错误不会显示。

    myconnect = New SqlConnection("xxxx")
    Dim Table1 As New SqlCommand("SELECT * FROM Table1", myconnect)
    Dim Table2 As New SqlCommand("SELECT * FROM Table2", myconnect)

    Dim array1 As New ArrayList
    Dim array2 As New ArrayList

    Table1.Connection.Open()
    Dim r As SqlDataReader
    r = Table1.ExecuteReader(CommandBehavior.CloseConnection)
    While r.Read
        array1.Add(r(1).ToString())
        array1.Add(r(2).ToString())
        array1.Add(r(3).ToString())
        array1.Add(r(4).ToString())

    End While
    r.Close()
    myconnect.Close()



    Table2.Connection.Open()
    Dim r2 As SqlDataReader
    r2 = Table2.ExecuteReader(CommandBehavior.CloseConnection)
    While r2.Read
        array2.Add(r2(1).ToString())
        array2.Add(r2(2).ToString())
        array2.Add(r2(3).ToString())
        array2.Add(r2(4).ToString())

    End While
    r2.Close()
    myconnect.Close()



    Dim comparestringa, comparestringb As String
    Dim compare_string_counter As Int16 = 1

    comparestringa = userintarray(0)
    comparestringb = eventintarray(0)


     For x = 0 To array1.Count - 1

        If comparestringa(x) = "1" And comparestringa(x) = comparestringb(x) Then

              Label4.Text = Label4.Text + " 1 "

        Else
            compare_string_counter = compare_string_counter + 1
        End If
        comparestringa = userintarray(x)
        comparestringb = eventintarray(x)

    Next

【问题讨论】:

    标签: .net vb.net arrays


    【解决方案1】:

    userintarray 和 eventintarray 没有声明(至少在您发布的代码中没有。)显然它们的尺寸太小,或者根本没有尺寸。

    【讨论】:

    • 那些数组其实分别是array1和array 2
    【解决方案2】:

    你的

    userintarray(x)
    
    eventintarray(x)
    

    没有在你的代码sn-p中定义。能否在使用前检查是否为它们分配了足够的数组项?

    【讨论】:

    • 那些数组其实分别是array1和array 2
    【解决方案3】:

    循环遍历数组的代码只有一个索引变量并将其用于两个数组。鉴于索引超出范围错误,我怀疑数组不包含相同数量的项目。由于索引是基于array1的,因此很可能array2较小,因此索引无效。

    【讨论】:

      【解决方案4】:

      假设您的“select * from x”(真的,填写列名!)返回 4 个值,您必须这样做:

      array1.Add(r(0).ToString())
      array1.Add(r(1).ToString())
      array1.Add(r(2).ToString())
      array1.Add(r(3).ToString())
      

      数据读取器从位置 0 开始,就像 dotnet 中的其他所有内容一样。

      【讨论】:

        猜你喜欢
        • 2017-06-01
        • 1970-01-01
        • 2019-04-17
        • 1970-01-01
        • 2013-11-25
        • 2017-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多