索引超出范围

时间:2012-11-27 10:07:54

标签: c# visual-studio-2010 c#-4.0

我在C#中编程我需要在字符串'xml'中加入一些东西

我有以下代码

        TextBox[] myTextBoxes = new TextBox[] { this.textBox2, this.textBox3, this.textBox4, this.textBox5, this.textBox6, this.textBox7, this.textBox8, this.textBox9, this.textBox10, this.textBox11 };
        TextBox[] ValueBoxes = new TextBox[] { this.textBox3, this.textBox5, this.textBox7, this.textBox9, this.textBox11 };
        CheckBox[] myCheckBoxes = new CheckBox[] { this.checkBox2, this.checkBox4, this.checkBox6, this.checkBox8, this.checkBox10 };
        CheckBox[] myMandBoxes = new CheckBox[] { this.checkBox3, this.checkBox5, this.checkBox7, this.checkBox9, this.checkBox11 };

并验证我的某些条件

 xml += "<fields>";

        for (int i = 0; i < myTextBoxes.Length; i++)
        {
            if (string.IsNullOrWhiteSpace(myTextBoxes[i].Text))
            {
                if (myCheckBoxes[i].Checked == true)
                    xml += "<field display='yes'> ";
                else
                    xml += "<field display='no'> ";
                if (myMandBoxes[i].Checked == true)
                    xml += "<mandatory='yes'>";
                else
                    xml += "<Mandatory='no'>";
                xml += "<label>" + (string)myTextBoxes[i].Text + "</label>";

            }
        }

它在if(myCheckBoxes [i] .Checked == true)

给了我一个indexoutof boud异常

我该如何解决这个问题

7 个答案:

答案 0 :(得分:2)

您的数组中包含不同数量的元素,因此您无法使用相同的索引访问它们。它们必须独立完成。

答案 1 :(得分:0)

您没有与文本框相同数量的复选框,因此您无法使用相同的索引访问它们。 您的索引从0开始到myTextBoxes.Length,如果i大于4,那么您将获得此异常。

不确定你要做什么但是你可以在从myCheckBoxes访问元素之前添加一个长度检查。

if (i < myCheckBoxes.Length && myCheckBoxes[i].Checked == true)
        xml += "<field display='yes'> ";

答案 2 :(得分:0)

使用Foreach代替

此处编辑为 myTextBoxes.Length - 1

for (int i = 0; i < myTextBoxes.Length - 1; i++) 

修改

此外,您的复选框计数和Textox计数不符合

答案 3 :(得分:0)

您的for循环正在运行到myTextBoxes.length,但您正在迭代myCheckBoxes。您似乎有textboxes而不是CheckBoxes

将其更改为:

for(int i = 0; i&lt; myCheckBoxes.Length; i ++)         {

答案 4 :(得分:0)

而不是

for (int i = 0; i < myTextBoxes.Length; i++)

使用

for (int i = 0; i < myCheckBoxes.Length; i++) // or myMandBoxes.Length (Both the CheckBoxes have same items)

因为你正在使用CheckBoxes进行循环,所以为什么要有一个TextBox的长度。

答案 5 :(得分:0)

您的文本框有11个元素,而复选框有5个元素。

更改以下

 if (string.IsNullOrWhiteSpace(myTextBoxes[i].Text))

 if (string.IsNullOrWhiteSpace(myTextBoxes[i].Text) && i < myCheckBoxes.Length )

答案 6 :(得分:0)

首先,在使用循环构造字符串时,永远不要对字符串使用+ =,它们是immutable,并且以这种方式使用它,这只是浪费速度和内存。请改用StringBuilder实例。

至于你的问题,myTextBoxes数组的长度是10,所以你有索引0到9的项目。这行中的代码

if (myCheckBoxes[i].Checked == true)

尝试访问myCheckBoxes数组中具有5个元素(索引为0到4)的相应项。当i变为5时,代码将访问不存在的myCheckBoxes[5],因此异常。

除此之外,textBox2checkBox7只是控件的可怕名称,并且.net Framework中有更好的选项可用于XML序列化和生成。