没有从列表中获得预期的索引

时间:2014-03-09 00:10:28

标签: c# list collections indexing

我有一个显示集合的列表框。最初,列表框仅包含两个对象的默认数据库。用户将新对象添加到集合中,并在列表框中更新。

在用户添加新对象之前,我的代码按预期工作。

将对象加载到列表框中的代码。

    private void FillStudentListBox()
    {
        lstStudents.Items.Clear();
        for (int i = 0; i < students.Count; i++)
        {
            Student s = students[i];
            lstStudents.Items.Add(s.GetDisplayText());
        }            
    }

我的更新按钮代码:

    public void btnUpdate_Click(object sender, EventArgs e)
    {
        int target = Convert.ToInt16(lstStudents.SelectedIndex);
        if (target != -1)
        {
            UpdateStudentScores updateStudentScores = new UpdateStudentScores(target);
            updateStudentScores.Show();
        }
    }

如果我单击其中一个默认用户,然后单击“更新”,则表单将打开并填充正确的数据。但是,如果我添加一个新对象,然后单击新对象上的Update,我会在代码的这一部分出错:

    public Student this [int i]
    {
        get 
        {
            return students[i];
        }
        set
        {
            students[i] = value;
            Changed(this);
        }
    }

我确定该集合未正确更新。在某处:

    private void button2_Click(object sender, EventArgs e)
    {
        if (IsValidData())
        {               
            List<string> result = txtScores.Text.Split(new [] {' '}, StringSplitOptions.RemoveEmptyEntries).ToList();
            student = new Student(txtName.Text, result.Select(int.Parse).ToList());
            this.Close();
        }

    }

列表框已正确填写但索引计数仍然是2,应该是3.我在路上犯了什么简单的错误?

这里应该将学生添加到我的收藏中:

    private void btnAddNew_Click(object sender, EventArgs e)
    {
        AddNewStudent addStudentForm = new AddNewStudent();
        Student student = addStudentForm.GetNewStudent();
        if (student != null)
        {
            students += student;
        }
    }

我觉得这个代码已被设计为在单击按钮时已完成学生对象。

1 个答案:

答案 0 :(得分:0)

一旦声明,数组就是固定长度。尝试从数组中提取数据时OutOfRangeException通常表示您正在搜索不存在的索引。

为什么不使用列表而不是使用数组呢?然后,你可以使用像foreach这样的东西。

但是如果你不想这样做,你将不得不找到一种方法来更新你的数组(重新定义它更大),这样它就不会尝试返回超出范围的数据。 :)