用不同的属性重构同一个循环
本文关键字:重构 同一个 循环 属性 | 更新日期: 2023-09-27 18:29:19
我一直在重构我的一些代码,但我遇到了一种情况,我不确定如何重构,我可以告诉它应该完成,只是不确定如何完成。
这是:
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;
它们是不同的数据源,所以我不能把Average放在总和中。
我如何将其放入一个方法中,以便指定要使用的属性?
您可以将要执行的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);
使用LINQ怎么样?
list.Sum(i => i.value);
和
list.Average(i => i.value);
至少,这会清理你的内循环。由于评论中提出的问题,很难在外循环中判断。项目是否与数据相同(例如)?