2011-08-25 50 views
2

所以我想弄清楚我在做什么这个逻辑错了。这看起来很直接,我的断言表明,'if'陈述中的假设解决为真,但sum.ppStart等人没有14天添加到他们。C#日期时间评估问题

这可能是简单的,但任何帮助,将不胜感激。

//Determine the start/end days of each week of the pay period and retrieve a list of those entries 

DateTime[] weeks = timeTools.calcPP(0); 
DateTime today = DateTime.Now.Date; 

if (today > weeks[3]) 
{ 
    weeks[0].AddDays(14); 
    weeks[3].AddDays(14); 
    weeks[4].AddDays(14); 
} 

sum.ppStart = weeks[0]; 
sum.ppEnd = weeks[3]; 
sum.payDate = weeks[4]; 

回答

8

AddDays返回DateTime一个实例,现有的值不会改变,这是一个不可变的结构。当使用该功能时,捕获结果

DateTime myDate = ... 
myDate = myDate.AddDays(14); 
+1

噢,我觉得自己像个白痴。这不像我以前从未这样做过,哈哈。感谢大家的帮助! – BobZavala

+0

@Bob,它发生了。 –

+1

只需添加到此 - “DateTime”是不可变的,就像'String'一样。原来的问题是这两个问题所犯的常见错误。 –

2

这是因为您没有使用AddDays方法的结果。签名是

public DateTime AddDays(double days) 

左右(见link)。你需要这样做:

weeks[0] = weeks[0].AddDays(14); 
2

您需要分配值:

if (today > weeks[3]) 
{ 
    weeks[0] = weeks[0].AddDays(14); 
    weeks[3] = weeks[3].AddDays(14); 
    weeks[4] = weeks[4].AddDays(14); 
}