我在asp.net中动态创建了文本框。现在我通过以下代码提取值。
string[] sublist = new string[] { };
int[] maxmarkslist = new int[] { };
int i;
for (i = 0; i < Convert.ToInt32(Label15.Text); i++)
{
string sub = "subject" + i;
string marks = "maxmarks" + i;
TextBox subject = (TextBox)PlaceHolder1.FindControl(sub);
TextBox maxmarks = (TextBox)PlaceHolder1.FindControl(marks);
sublist[i] = subject.Text;
maxmarkslist[i] = Convert.ToInt32(maxmarks.Text);
}
但是我收到错误“索引超出了数组的范围”以下两行:
sublist[i] = subject.Text;
maxmarkslist[i] = Convert.ToInt32(maxmarks.Text);
当我调试它时,值会在subject.Text和maxmarks.Text中出现但不会出现在数组中。
我是否以错误的方式定义了数组?
答案 0 :(得分:2)
将两个数组定义为空数组。因此,如果您尝试索引这些错误,您将获得索引错误。
数组不会动态扩展。如果需要,请使用集合类型,稍后可以转换为数组。
试试这个:
int length = Convert.ToInt32(Label15.Text);
string[] sublist = new string[length-1];
int[] maxmarkslist = new int[length-1];
for (int i = 0; i < length; i++)
{
string sub = "subject" + i;
string marks = "maxmarks" + i;
TextBox subject = (TextBox)PlaceHolder1.FindControl(sub);
TextBox maxmarks = (TextBox)PlaceHolder1.FindControl(marks);
sublist[i] = subject.Text;
maxmarkslist[i] = Convert.ToInt32(maxmarks.Text);
}
或者以下是如何使用集合(List)类型执行此操作:
int length = Convert.ToInt32(Label15.Text);
List<string> sublist1 = new List<string>();
List<int> maxmarkslist1 = new List<int>();
for (int i = 0; i < Convert.ToInt32(Label15.Text); i++)
{
string sub = "subject" + i;
string marks = "maxmarks" + i;
TextBox subject = (TextBox)PlaceHolder1.FindControl(sub);
TextBox maxmarks = (TextBox)PlaceHolder1.FindControl(marks);
sublist1.Add(subject.Text);
maxmarkslist1.Add(Convert.ToInt32(maxmarks.Text));
}
string[] sublist = sublist1.ToArray();
int[] maxmarkslist = maxmarkslist1.ToArray();
请注意,您无需预先指定大小。但是要继续添加项目,因为它可以根据需要进行扩展。但阵列无法做到这一点。
您的string[] sublist = new string[] { };
是一种创建和初始化数组的快捷方式。因为您不必指定大小,但编译器将计算{}之间的元素并适当地设置大小。在你的情况下,由于{}内没有元素,它将创建一个空数组。
答案 1 :(得分:1)
string[] sublist = new string[100];
int[] maxmarkslist = new int[100];
把this..replace 100放在你的循环的最大可能值...但这不是一个好习惯...如果我发现更好的东西会回到这个线程......