1

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

这里是:

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;

它们是不同的数据源,所以我不能把平均值放在总和中。

如何将其放入可以指定要使用的属性的方法中?

4

2 回答 2

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);
于 2013-08-28T19:07:09.693 回答
1

使用 LINQ 怎么样?

list.Sum(i => i.value);

list.Average(i => i.value);

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

于 2013-08-28T19:11:47.463 回答