C# 重构具有不同属性的相同循环

C# 重构具有不同属性的相同循环,c#,.net,oop,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++ } 然后,我在下面有一个完全相同的循环,唯一的区别是

我一直在重构我的一些代码,我遇到了一种情况,我不确定如何重构,我可以说应该这样做,只是不确定如何重构

这是:

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]类似。平均值=总和

它们是不同的数据源,所以我不能将平均值计入总和


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

您可以传递一个
操作来执行一个方法:

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++
    }
}


您可以传入
操作
以执行方法:

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++
    }
}

使用LINQ怎么样

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

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

使用LINQ如何

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



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

项目似乎从未用于任何用途?数据从何而来?是否可以粘贴完整的代码,包括两个循环?thanksIs
count
在您显示的代码之后,但在您提到的第二个循环之前重置?@KevinDiTraglia啊,是的。似乎该项从未用于任何用途?以及
数据从何而来?您能粘贴完整的代码,包括两个循环吗?thanksIs
count
在您显示的代码之后,但在您提到的第二个循环之前重置?@KevinDiTraglia啊,是的。我如何将我的列表源传递给循环?@timmy,请查看我的编辑。我不知道你的列表来源是什么,所以我只是把你的列表类型放在这里。谢谢!这就是我要找的。我还没学会呢!你会说这是我尝试做的最好的方法吗?我不确定如何正确设置
平均值。通过这种方式,您可以在两个调用中计算一个和,但使用它来设置
sum
Average
@rook Yea,两个调用中的数学结果都是相同的。唯一的区别是数据源和要分配给的属性。我如何传递列表源以进行循环?@timmy,请查看我的编辑。我不知道你的列表来源是什么,所以我只是把你的列表类型放在这里。谢谢!这就是我要找的。我还没学会呢!你会说这是我尝试做的最好的方法吗?我不确定如何正确设置
平均值。通过这种方式,您可以在两个调用中计算一个和,但使用它来设置
sum
Average
@rook Yea,两个调用中的数学结果都是相同的。唯一的区别是数据源和要分配给的属性。
list.Average(i => i.value);