这是一个名为Expense Manager的类
public void AddExpense(Expense currentExpense)
{
Console.Write("Enter date in this format (2017-08-26): ");
currentExpense.date = DateTime.Parse(Console.ReadLine());
Console.Write("Enter the description: ");
currentExpense.description = Console.ReadLine();
Console.Write("Enter the amount: ");
currentExpense.amount = decimal.Parse(Console.ReadLine());
expenseList.Add(currentExpense);
}
public void PrintReport()
{
Console.Write("{0, -20} {1, 20} {2, 25} {3, 40}", "Index", "Date", "Amount", "Description\n");
Console.Write("{0, -20} {1, 20} {2, 25} {3, 40}", "-----", "----------", "----------", "----------------------\n");
for (int i = 0; i < (expenseList.Count); i++)
{
Console.Write("{0, -20} {1, 20} {2, 25:C2} {3, 40}\n", i, expenseList[i].date.ToShortDateString(), expenseList[i].amount, expenseList[i].description);
}
Console.Write("{0, -20} {1, 20} {2, 25} {3, 40}", "-----", "----------", "----------", "----------------------\n");
//Console.WriteLine("{0, 40} {1, 25:C2}", "\nTotal Amount:", expenseList[Count].amount);
}
这是我的主要课程,我正在调用添加和打印列表中数据的方法。
Expense myExpense = new Expense();
ExpenseManager myExpenseManager = new ExpenseManager();
//myExpenseManager.AddExpense(myExpense);
int option = 8;
while (option != 3)
{
Console.WriteLine("Enter 1 to add and 2 to print and 3 to exit");
option = int.Parse(Console.ReadLine());
switch (option)
{
case 1:
myExpenseManager.AddExpense(myExpense);
break;
case 2:
myExpenseManager.PrintReport();
break;
default:
break;
}
}
以下是输出(显示相同的内容):
Index Date Amount
Description
----- ---------- ----------
----------------------
0 7/8/2017 $21.00
njjnn
1 7/8/2017 $21.00
njjnn
----- ---------- ----------
----------------------
Enter 1 to add and 2 to print and 3 to exit
它将覆盖我以前的值,并在列表中显示相同的值。我不知道是什么问题。我真的需要帮助
答案 0 :(得分:1)
问题是您每次都使用相同的费用对象。
这样想,您有1个Expense
存储桶,将其填充,然后将其放置在列表中,然后下次使用相同的存储桶并将其填充并添加到您的列表。
现在,当您打印报告时,将始终获得相同的值(最后一个值)。那是因为您使用的是相同的存储桶!
解决方法是创建一个新的Expense
对象
case 1:
Expense myExpense = new Expense();
myExpenseManager.AddExpense(myExpense);
甚至更好的是,只需在AddExpense
中创建它,甚至不需要将其传递给
public void AddExpense()
{
Expense currentExpense = new Expense();
Console.Write("Enter date in this format (2017-08-26): ");
currentExpense.date = DateTime.Parse(Console.ReadLine());
Console.Write("Enter the description: ");
currentExpense.description = Console.ReadLine();
Console.Write("Enter the amount: ");
currentExpense.amount = decimal.Parse(Console.ReadLine());
expenseList.Add(currentExpense);
}
更新
您能再多说明一点吗?为什么 'expenseList.Add(currentExpense)'不在最后添加内容
尽管您多次将费用添加到列表中,但您仅创建了一项费用。并且您会不断用最后一个值覆盖该值。
您有一个完全相同的费用清单,该清单仅被修改了几次。
Bucket 1
Add your values
Add it to your list
Bucket 1
Add your values
Add it to your list
Bucket 1 = some expense
Add your values
Add it to your list
一天结束时,您会一遍又一遍地列出相同的费用
List
Item 1 = Bucket 1
Item 2 = Bucket 1
Item 3 = Bucket 1
Item 4 = Bucket 1
Item 5 = Bucket 1
通过每次创建新费用
List
Item 1 = Bucket 1
Item 2 = Bucket 2
Item 3 = Bucket 3
Item 4 = Bucket 4
Item 5 = Bucket 5