用不同的属性重构同一个循环

本文关键字:重构 同一个 循环 属性 | 更新日期: 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);

至少,这会清理你的内循环。由于评论中提出的问题,很难在外循环中判断。项目是否与数据相同(例如)?