DateTime AddMonths正相乘

mat*_*shu 1 c# datetime

我有一个跟踪账单的程序.如果账单每月重复出现,我想将这些日期(最多一年)添加到列表中.

//code changed for brevity but same principle applies
private List<Bill> GenerateRecurring(Bill bill)
{
  //bill.DueDate = Convert.ToDateTime("10/14/2017");
  var Bills = new List<Bill>();
  for (int i = 1; i <= 12; i++)
  {
      var newBill = bill;
      newBill.DueDate = bill.DueDate.AddMonths(i);
      Bills.Add(newBill);
  }
  return Bills;
}
Run Code Online (Sandbox Code Playgroud)

我希望Bills中的元素的日期为2017年11月14日,2017年12月14日等,但它们是11/14/2017,1/14/201,4/14/201等.

"bill.DueDate"每次都在循环中更新还是我遗漏了什么?

kni*_*ttl 6

var newBill = bill;不会从现有账单创建新账单,它只是给现有账单另一个名称来引用它.因此,您始终更新同一对象并将相同的对象添加到Bills集合中(在循环之后,Bills将包含您的单个帐单12次).