我有一个跟踪账单的程序。如果账单每月重复出现,我想将这些日期(最多一年)添加到列表中。
//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;每次在循环中更新或我错过了什么?
答案 0 :(得分:6)
var newBill = bill;
不会从现有帐单创建新帐单,它只是为现有帐单提供另一个名称来引用它。因此,您始终更新同一个对象并将相同的对象添加到Bills
集合中(在您的循环之后,Bills
将包含您的单个帐单12次)
答案 1 :(得分:1)
问题实际上在于您的var newBill = bill
行。这不会创建新帐单,但实际上只是对旧帐单的引用。因此,每次执行循环时,相同的日期都会递增。