DateTime AddMonths正相乘

时间:2017-10-15 01:34:04

标签: 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;
}

我预计Bills中的元素的日期为11/14 / 2017,12 / 14/2017等,但它们是11/14 / 2017,1 / 14/201,4/14/201,等等

&#39; bill.DueDate&#39;每次在循环中更新或我错过了什么?

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

问题实际上在于您的var newBill = bill行。这不会创建新帐单,但实际上只是对旧帐单的引用。因此,每次执行循环时,相同的日期都会递增。