计算C#中数组中多个项目的总和

本文关键字:项目 数组 计算 | 更新日期: 2023-09-27 17:58:31

我正在尝试为类中的项求和。为了更好地解释你,我有一个购物车对象,我可以用这种方法计算它的总和:

 public decimal ComputeTotalValue()
        {
            return itemCollection.Sum(e => e.Item.Price*e.Quantity);                        
        }

我们案例中的项目对象是这样的:

public class CartItem
        {
            public RestItem Item { get; set; }
            public int Quantity { get; set; }
        }

现在RestItem类具有以下属性:

public class RestItem
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public int InStockNow { get; set; }
        public int Order { get; set; }
        public decimal Price { get; set; }
        public bool HasImage { get; set; }
        public bool HasModifiers { get; set; }
        public string PLU { get; set; }
        public int CategoryId { get; set; }
        public byte[] ImageArray { get; set; }
        public IEnumerable<ModifierOption> Modifiers { get; set; }
    }

最后一个属性,Modifiers是我今天包含的新属性,这是内容:

public class ModifierOption
    {
        public string ID { get; set; }
        public decimal Price { get; set; }            
    }

我想实现的是,当调用ComputeTotalValue时,如果还有ModifierOption字段,我也想计算这些字段的总和,并将结果包括在总和中。

计算C#中数组中多个项目的总和

您可以将修改器的价格添加到物品的价格中,不是吗?

public decimal ComputeTotalValue()
{
   return itemCollection.Sum(e => (e.Item.Price + e.Item.Modifiers.Sum(m=>m.Price))*e.Quantity);                        
}

这样做:

public class RestItem
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public int InStockNow { get; set; }
    public int Order { get; set; }
    public decimal Price { get; set; }
    public bool HasImage { get; set; }
    public bool HasModifiers { get; set; }
    public string PLU { get; set; }
    public int CategoryId { get; set; }
    public byte[] ImageArray { get; set; }
    public IEnumerable<ModifierOption> Modifiers { get; set; }
    public decimal ComputeTotalPrice() {
        return (this.Modifiers?.Sum(x => x.Price) ?? 0) + Price;
    }
}
public decimal ComputeTotalPrice(){ 
    return itemCollection?.Sum(x => x.ComputeTotalPrice()) ?? 0;
}