我有一个函数可以通过添加TtimeSpan
来计算总工时。我尝试在网上搜索并找到了TimeSpan.Add()
。
以下是我的代码示例:
TimeSpan TotalWorkHours = new TimeSpan(0,0,0);
List<TimeSpan> Interval = new List<TimeSpan>();
Interval.Add(TimeSpan.Parse("04:20:07"));
Interval.Add(TimeSpan.Parse("03:59:49"));
//Having a looping to Add in the Interval and combine the total work hours
for(int i = 0; i < Interval.count; i++)
{
if(i == 0)
TotalWorkHours = Interval[i];
else
//This section will always add in "00:00:00"
TotalWorkHours.Add(Interval[i]);
}
然而,由此产生的时间跨度为00:00:00
。它出了什么问题?
答案 0 :(得分:7)
您正在呼叫Add
,但根本没有使用结果。 Add
不会更改值 - 它会返回一个新值。你想要:
TotalWorkHours = TotalWorkHours.Add(Interval[i]);
或更具惯用性,IMO:
TotalWorkHours += Interval[i];
或者甚至更具惯用力,在我看来:
// Note the casing of the variable names to follow conventions,
// and the fact that "intervals" is plural because it contains
// more than one interval.
List<TimeSpan> intervals = ...;
var totalWorkHours = TimeSpan.Zero;
foreach (var interval in intervals)
{
totalWorkHours += interval;
}
甚至只使用LINQ聚合:
var totalWorkHours = intervals.Aggregate(TimeSpan.Zero, (x, y) => x + y);
答案 1 :(得分:2)
Timespan
是不可变的。任何看起来像改变状态的方法实际上会返回一个带有adjstment的新实例。只需将您的代码更改为:
TotalWorkHours = TotalWorkHours.Add(Interval[i]);