1

(C#) 我有 2 节课。1 称为雇员。另一个是我的“主要”。我正在尝试获取一个列表并将列表中的每个值分配给一个 Employee 对象数组。

//Inside "Main" class
int counter = NameList.Count;

        Employee[] employee = new Employee[counter];

        for (int i = 0; i <= counter; i++)
        {
            employee[i].Name = NameList[i];
            employee[i].EmpNumber = EmpNumList[i];
            employee[i].DateOfHire = DOHList[i];
            employee[i].Salary = SalaryList[i];
            employee[i].JobDescription = JobDescList[i];
            employee[i].Department = DeptList[i];
        }

这将返回错误:

Pgm4.exe 中出现“System.NullReferenceException”类型的未处理异常附加信息:对象引用未设置为对象的实例。

我认为这意味着我没有正确调用列表。任何帮助将非常感激。谢谢你。

4

4 回答 4

5

一件事在这里立即脱颖而出。您没有声明employee[i]new Employee在每次迭代的开始,因此除了所有其他事情之外,您将获得一个NullReferenceException

(也正如 Marc Gravell 指出的那样,<=应该<避免 Index out of range 异常......)

for (int i = 0; i < counter; i++)
        {
         //actually create an instance of Employee in employee[i]
            employee[i]  = new Employee();
            employee[i].Name = NameList[i];
            employee[i].EmpNumber = EmpNumList[i];
            employee[i].DateOfHire = DOHList[i];
            employee[i].Salary = SalaryList[i];
            employee[i].JobDescription = JobDescList[i];
            employee[i].Department = DeptList[i];
        }
于 2013-11-10T21:51:56.430 回答
3

您已经为引用创建了一个包含空间的数组,但尚未创建任何Employee实例。你的Employee[i]都是null。它应该是:

for (int i = 0; i < counter; i++)
{
    var emp = new Employee();
    emp.Name = NameList[i];
    emp.EmpNumber = EmpNumList[i];
    emp.DateOfHire = DOHList[i];
    emp.Salary = SalaryList[i];
    emp.JobDescription = JobDescList[i];
    emp.Department = DeptList[i];
    employee[i] = emp;
}

或(更整齐)

for (int i = 0; i < counter; i++)
{
    employee[i] = new Employee
    { 
        Name = NameList[i],
        EmpNumber = EmpNumList[i],
        DateOfHire = DOHList[i],
        Salary = SalaryList[i],
        JobDescription = JobDescList[i],
        Department = DeptList[i]
    };
}
于 2013-11-10T21:51:30.603 回答
0

除了需要为Employee数组的每个元素创建一个实例之外,这一行还有一个错误:

for (int i = 0; i <= counter; i++)

C# 数组从零开始,因此您需要:

for (int i = 0; i < counter; i++)

否则,您将循环超过数组的末尾。

您的代码应如下所示:

for (int i = 0; i < counter; i++)
{
    employee[i] = new Employee();
    .... // your existing code here
}    
于 2013-11-10T21:50:50.310 回答
0

Employee 未初始化,将其添加到每次迭代的开头:

employee[i]  = new Employee();

您正在访问未分配给您的索引

替换这个:

int i = 0; i <= counter; i++

和:

int i = 0; i < counter; i++

于 2013-11-10T21:51:44.023 回答