C# List.Add()正在覆盖我以前的值

C# List.Add()正在覆盖我以前的值,c#,C#,这是一个名为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 desc

这是一个名为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);


    }
以下是输出(显示相同的内容):


它将覆盖我以前的值,并在列表中显示相同的值。我不知道是什么问题。我真的需要帮助

问题是您每次都使用相同的费用对象

这样想,你有一个
费用
桶,你把它装满,然后把它放在列表中,然后下次你用同样的钱把它装满,再把它加到你的列表中

现在,当您打印出报告时,始终会得到相同的值(最后一个值)。那是因为你用的是同一个桶

修复方法是创建一个新的
费用
对象

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

谢谢它起作用了,你能再多给我解释一下吗。为什么“expenseList.Add(currentExpense)”没有在最后添加内容。
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