Class中集合抛出错误的初始化

时间:2014-03-08 20:28:29

标签: c# list class exception collections

我正在尝试访问公共集合(列表)以在某些文本框中显示该集合中的索引对象。

public partial class UpdateStudentScores : Form 
{
    int index;
    private StudentList students = new StudentList();

    public UpdateStudentScores(int target)
    {
        InitializeComponent();
        index = target;
    }

    private void UpdateStudentScores_Load(object sender, EventArgs e)
    {
        txtName.Text = students[index].WholeName;
    }

}

我运行程序并尝试加载数据,但我的StudentList.cs

中出现异常
    public Student this [int i]
    {
        get 
        {
            return students[i];
        }
        set
        {
            students[i] = value;
            Changed(this);
        }
    }

该异常表示我的索引超出范围。我的学生[]里面没有任何物品。当我删除它:

私人StudentList students = new StudentList();

从我的UpdateStudentScores.cs

,我不再有这个例外。我的那个集合的初始化如何干扰我的StudentList类的填充?

2 个答案:

答案 0 :(得分:1)

您的表单正在加载/初始化,但列表中的索引为零。在代码中没有位置将项目加载到集合中。

您的变量index是值类型,默认为零。

txtName.Text = students[index].WholeName;

答案 1 :(得分:0)

除非是数组,否则List<T>在创建时为空(list.Count == 0)。您必须先添加项目,然后才能通过索引访问它们。

public Student this [int i]
{
    get 
    {
        return students[i];
    }
    set
    {
        if (i < students.Count) {
            students[i] = value;
            Changed(this);
        } else if (i == students.Count) {
            students.Add(value);
            Changed(this);
        } else {
            throw new IndexOutOfRangeException(
                "Student at this index is not accessible.");
        }
    }
}