3

我在 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 中,但不会进入数组。

我是否以错误的方式定义了数组?

4

2 回答 2

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);
}

或者这里是如何使用集合(列表)类型执行此操作:

        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[] { };是创建和初始化数组的快捷方法。因为您不必指定大小,但编译器会计算 {} 之间的元素并适当地设置大小。在您的情况下,由于 {} 内没有元素,它将创建一个空数组。

于 2012-11-29T16:05:24.733 回答
1
        string[] sublist = new string[100];
        int[] maxmarkslist = new int[100];

把这个..用你的循环的最大可能值替换 100 ......但这不是一个好习惯......如果我发现更好的东西会回到这个线程......

于 2012-11-29T16:14:55.547 回答