我一直在重构我的一些代码,我遇到了一个我不确定如何重构的情况,我可以告诉它应该完成,只是不确定如何。
这是:
foreach(var item in list)
{
double sum = 0;
foreach(var cost in item.data)
{
sum += cost.value;
}
ListObject[count].Sum = sum;
count++
}
然后我在这个下面有完全相同的循环,唯一的区别是ListObject属性。像ListObject [count] .Average = sum;
它们是不同的数据源,因此我不能将平均值放在总和中。
如何将其添加到我可以指定要使用的属性的方法中?
答案 0 :(得分:3)
您可以传入Action
执行方法:
void ExecuteLoop(Action<int, int> callback, YourListType list)
{
var count = 0;
foreach(var item in list)
{
sum = 0;
foreach(var cost in data)
{
sum += cost.value;
}
callback(count, sum);
count++
}
}
然后当你打电话时:
ExecuteLoop((index, sum) => ListObject[index].Sum = sum, list);
或
ExecuteLoop((index, sum) => ListObject[index].Average = sum, list);
答案 1 :(得分:1)
使用LINQ怎么样?
list.Sum(i => i.value);
和
list.Average(i => i.value);
至少,这会清理你的内循环。由于评论中提出的问题,很难在外循环上讲述。项目是否与数据相同(例如)?