关于递归方法设计的建议

时间:2012-02-15 10:44:18

标签: c# design-patterns recursion

我有一个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值的方法?

赞赏任何优雅的想法?

由于

2 个答案:

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

    }