添加()时间跨度似乎没有添加它们

时间:2014-02-13 09:45:44

标签: c# timespan

我有一个函数可以通过添加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。它出了什么问题?

2 个答案:

答案 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]);