用不同的属性重构相同的循环

时间:2013-08-28 19:02:55

标签: c# .net oop

我一直在重构我的一些代码,我遇到了一个我不确定如何重构的情况,我可以告诉它应该完成,只是不确定如何。

这是:

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;

它们是不同的数据源,因此我不能将平均值放在总和中。

如何将其添加到我可以指定要使用的属性的方法中?

2 个答案:

答案 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);

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