我在下面有这段代码,它通过数据结构循环构建字典。
我将此代码复制了多次,唯一的区别是字典的键
所以在下面的代码中它恰好是:
task.Project + task.Name
这是字典的关键,但在其他情况下它只是:
task.Project
要不就
task.Name
这是一个硬编码“桶”方法之一的示例。
我的目标是拥有一个通用的“Bucket”方法,我可以在其中有一个回调或某种方式来传递用于计算密钥的函数。
这样做的最佳方法是什么?
private Dictionary<string, TeamHours> BucketByProjectTask(Dictionary<string, TimeBooking> timebookings)
{
Dictionary<string, TeamHours> dict = new Dictionary<string, TeamHours>();
foreach (var name in timebookings.Keys)
{
TimeBooking tb = timebookings[name];
Person p = tb.Person;
foreach (var booking in tb.WeeklyTimeBookings.Keys)
{
var item = tb.WeeklyTimeBookings[booking];
foreach (var task in item.TaskSlices)
{
if (dict.ContainsKey(task.Project + task.Name))
{
TeamHours th = dict[task.Project + task.Name];
th.Hours = th.Hours + task.Hours;
}
else
{
TeamHours th = new TeamHours();
th.Hours = task.Hours;
th.Project = task.Project;
th.Task = task.Name;
th.Workstream = tb.Person.OrganisationalUnitName;
dict[task.Project + task.Name] = th;
}
}
}
}
return dict;
}