这更像是一个逻辑问题,而不是实现。
class Step {
public string StepStatus {get ; set;}
public List<Task> Tasks {get ; set;}
public Step() {
Tasks= new List<Task>() ;
}
//on some event I call this method that updates StepStatus based on status of
//all task statuses
private void UpdateStepStatusFromTasks() {
foreach (Task t in Tasks) {
// t.TaskStatus
// set StepStatus here
// LOGIC here
}
}
}
每个Task对象t都有自己的TaskStatus字符串。
如果所有任务状态为&#34; DONE&#34; ,将步骤状态设置为&#34;完成&#34;
如果所有任务状态为&#34; TODO&#34; ,将步骤状态设置为&#34; TODO&#34;
如果其中一个任务状态为&#34; DOING&#34; ,将步骤状态设置为&#34;执行&#34;
如果其中一个任务状态为&#34; DONE&#34;一个是&#34; TODO&#34; ,将步骤状态设置为&#34;执行&#34;
实现此目的的最佳方法是什么?在代码复杂性和较少的kludgyness方面。
我是如何解决的:
private void UpdateStepStatusFromTasks()
{
if ( Tasks.All(t => t.TaskStatus.Equals("Not Started")))
StepStatus = "Not Started";
else if (Tasks.All(t => t.TaskStatus.Equals("Completed")))
StepStatus = "Completed";
else
StepStatus = "In Progress";
}
答案 0 :(得分:1)
8192
答案 1 :(得分:0)
正如Blorgbeard所指出的,这是所有人和任何人的完美用例。一个例子:
tasks.All( (t) => t.Status == Done);
t.Status ==完成只是一个例子,它可以是任何布尔表达式。
答案 2 :(得分:0)
你可以这样做:
var taskStatuses = Tasks.Select(t => t.TaskStatus).Distinct().ToList();
if (taskStatuses.Count == 1) {
// all tasks are the same status, so that's the step status
return taskStatuses[0];
}
if (taskStatuses.Contains("DOING")) return "DOING";
if (taskStatuses.Contains("DONE") && taskStatuses.Contains("TODO")) {
return "DOING";
}
// whatever other logic you want