2017-10-15 76 views
1

我有一個跟蹤賬單的程序。如果帳單每月重複發生,我想將這些日期(最多一年)添加到列表中。DateTime AddMonths正在相乘

//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; 
} 

我預計在法案中的元素有日期2017年11月14日,2017年12月14日等,而是他們是2017年11月14日,2018年1月14日,4/14/2018等

'bill.DueDate'每次在循環中更新或我缺少什麼?

+0

將bill分配給newBill不會複製該對象,而只是將兩個變量指向同一個對象實例。您需要明確地向Bill類添加一個方法,以創建具有相同值的類的新實例。 – NineBerry

+0

在循環前保存dueDate,並使用它爲您的賬單創建新日期 –

回答

6

var newBill = bill;沒有從現有賬單中創建新賬單,它只是給現有賬單另一個名稱來引用它。所以你總是更新相同的對象,並將相同的對象添加到Bills集合(在您的循環之後,Bills將包含您的單個帳單12次) 。

+0

另外Bills列表應該在方法範圍內 –

1

問題實際上與您的var newBill = bill一行。這不會產生新的賬單,但實際上只是提及您的舊賬單。因此,每次循環執行時,相同的日期都會增加。