このような単純な質問で申し訳ありませんが、このコードの修正に数時間取り組んでおり、先に進むことができません.
顧客、従業員、顧客グループの 3 つのクラスを使用する必要があるプロジェクトがあります。クラスはファイル (.csv) から読み込まれ、内容を表示するコンソールにダンプされます。従業員クラスの単一のインスタンスと顧客のリストの両方を含む顧客グループ クラス、およびいくつかのクラス固有の変数を処理する他のいくつかのリスト。コードをダンプすると、未処理の例外エラーが発生し、デバッグにより、顧客グループ クラス内の顧客クラスが null であることが示されました。私が知っている限りでは、他にもさまざまな問題がある可能性がありますが、このクラスのリストを作成することが問題です。
コード自体はかなり長いので、簡潔にするために短くしてみます。
問題のプログラム ビット:
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("--------------------------------");
}