对于这样一个简单的问题,我深表歉意,但我已经努力修复此代码几个小时了,但我无法取得任何进展。
我有一个项目需要使用三个类:客户、员工和客户组。这些类从文件 (.csv) 中填充,然后转储回显示其内容的控制台。客户组类,它包含员工类的单个实例和客户列表以及处理几个类唯一变量的其他几个列表。转储我的代码时,我得到一些未处理的异常错误,调试表明客户组类中的客户类为空。据我所知,可能存在一系列其他问题,但获取这个类的列表是问题所在。
代码本身很长,因此为了简洁起见,我将尝试对其进行精简。
有问题的程序位:
while (dataArray[i] == "End")
{
int.TryParse(dataArray[i], out temp);
i++;
testGrp.Customers.Add(new Customer(temp, dataArray[i++], dataArray[i++], dataArray[i++], dataArray[i++]));
double.TryParse(dataArray[i], out doubleTemp);
testGrp.AmountSpent.Add(doubleTemp);
i++;
testGrp.SpendingLevel.Add(dataArray[i]);
i++;
}
客户群类:
public CustomerGrp(int groupId, Employee executive, List<Customer> customers, List<double> amountSpent, List<string> spendingLevel)
{
this.groupId = groupId;
this.executive = executive;
this.customers = customers;
this.amountSpent = amountSpent;
this.spendingLevel = spendingLevel;
}
和客户类:
public Customer(int newId, string newName, string newPhoneNumber, string newAddress, string newMarried)
{
this.Id = newId;
this.Name = newName;
this.PhoneNumber = newPhoneNumber;
this.Address = newAddress;
this.Married = newMarried;
}
dataArray 是通过将 csv 文件中的初始字符串分解为更小的位而生成的数组。它并不漂亮,但它现在已经达到了它的目的。在此之前,已经处理了 groupID 和执行位,以 i++ 结尾以准备显示的部分。
我可以在没有错误的情况下填充 Employee 执行部分,但是在一个类中填充一个类列表是我无法完全理解的事情。我认为我做得对,但我能找到的大多数例子并不完全适合这种情况。我知道我的代码一点也不漂亮,但我只是在开始清理之前尝试建立基本功能。任何帮助或建议将不胜感激。
编辑
如所问,控制台中给出的消息如下:
System.NullReferenceException 对象引用未设置为对象的实例。在“线”和“线”。
这些行是:
DumpContents(testGrp);
和
static void DumpContents(CustomerGrp customerGrp)
{
Console.WriteLine("------- Customer Content -------");
Console.WriteLine(" Id: {0}", customerGrp.GroupId);
DumpContents(customerGrp.Executive);
foreach (Customer cust in customerGrp.Customers)
{
DumpContents(cust); // <- Exception Error line here
}
Console.WriteLine("--------------------------------");
}
编辑
包含重载的 DumpContents 函数:
static void DumpContents(Employee employee)
{
Console.WriteLine("------- Employee Content -------");
Console.WriteLine(" Id: {0}", employee.Id);
Console.WriteLine(" Name: {0}", employee.Name);
Console.WriteLine(" Start Date: {0}", employee.StartDate);
Console.WriteLine(" Rate: {0}", employee.GetRate());
Console.WriteLine(" Hours: {0}", employee.GetHours());
Console.WriteLine(" Pay: {0}", employee.CalcPay());
Console.WriteLine(" Tenure: {0} Years", employee.GetTenure());
Console.WriteLine("--------------------------------");
}
static void DumpContents(Customer customer)
{
Console.WriteLine("------- Customer Content -------");
Console.WriteLine(" Id: {0}", customer.Id);
Console.WriteLine(" Name: {0}", customer.Name);
Console.WriteLine(" Phone Number: {0}", customer.PhoneNumber);
Console.WriteLine(" Address: {0}", customer.Address);
Console.WriteLine("Marital Status: {0}", customer.Married);
Console.WriteLine("--------------------------------");
}