我有一个Task类,它可以报告任务完成所需的时间。但是,该类可以包含相同类型的子任务。
public class Task
{
public string Name{get; set;}
public DateTime Start {get; set;}
public DateTime Finish {get; set;}
public List<Task> SubTasks {get; set;}
public TimeSpan GetDuration()
{
return Finish - Start;
}
public TimeSpan GetTotalDuration()
{
//How?
}
}
SubTasks可以有多个级别,现在没有逻辑限制。我不确定如何设计负责执行子任务并累积TimeSpan值的方法?
赞赏任何优雅的想法?
由于
答案 0 :(得分:8)
我只是这样做:
public TimeSpan GetTotalDuration()
{
if (SubTasks != null)
return GetDuration() + SubTasks.Sum(t => t.GetTotalDuration());
return GetDuration();
}
使用Linq。
编辑:处理SubTasks为空的情况(通过Kristof的回答)。
答案 1 :(得分:2)
public TimeSpan GetTotalDuration()
{
var duration = GetDuration();
if(SubTasks != null && SubTasks.Count > 0)
{
foreach (var t in SubTasks)
{
duration += t.GetTotalDuration();
}
}
return duration;
}