【问题标题】:How to Sum Items in Generic List<T> [duplicate]如何对通用列表<T>中的项目求和 [重复]
【发布时间】:2014-06-15 22:15:53
【问题描述】:

如何按总成本总结以下通用列表?意思是可以将以下两项费用相加得到总和吗?

型号:

public class Product
{
      public string Name {get;set;}
      public int Cost  {get;set;}
}

现在我想在这样的通用列表中使用该模型:

public void GetTotal()
{
     IList<Product> listOfJediProducts = new List<Product>();

     Product newProduct1 = new Product();
     newProduct1.Name = "LightSaber";
     newProduct1.Cost = 1500;
     listOfJediProducts.Add(newProduct1);

     Product newProduct2 = new Product();
     newProduct2.Name = "R2RobotSpec9";
     newProduct2.Cost = 5000;
     listOfJediProducts.Add(newProduct2);
 }

如何返回列表中产品的总计?

【问题讨论】:

    标签: c# generics


    【解决方案1】:
    listOfJediProducts.Sum(p => p.Cost);
    

    这会在序列中的每个元素上运行选择器 lambda 表达式(在这种情况下返回 Cost)。然后在“隐式返回”IEnumerable 上运行Sum 函数,它显然会计算总和并返回它。

    值得注意的是,上面的写法类似:

    listOfJediProducts.Select(p => p.Cost).Sum();
    

    在理解我的第一个示例的作用时,这可能更明显(如果不是冗长的话)。

    我说“隐式返回”是因为 Sum 仅对 IEnumerable 数字有意义,内部工作可能正在做一些更接近此的事情:

    int total;
    foreach (Product p in listOfJediProducts)
       total += p.Cost;
    
    return total;
    

    【讨论】:

    • 我尝试了 .Sum 但它没有显示出来。使用 .net 4。
    • “出现”是什么意思。您的文件中有using System.Linq 吗?
    • 炸掉那些叛军渣滓!!!!!!!!!当它丢失时,我已经习惯了 VS 警报......谢谢!
    • 没问题,过去咬过我不止一次:)
    【解决方案2】:

    否则,使用foreach 循环

    int total_cost = 0;
    foreach (Product p in listOfJediProducts)
    {
     total_cost+= p.cost;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多