我在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异常我该如何解决这个问题
答案 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]
,因此异常。
除此之外,textBox2
或checkBox7
只是控件的可怕名称,并且.net Framework中有更好的选项可用于XML序列化和生成。