如何使用foreach获取List对象属性值的总和

本文关键字:属性 对象 何使用 foreach 获取 List | 更新日期: 2023-09-27 18:05:27

我想做什么

查找购物车列表中所有商品的价格总和。

我是如何解决的

我认为将它作为属性添加到Cart类中是有意义的。我还认为,只使用foreach循环来迭代CartList并将itemprice(ProductsInCart.Price(添加到临时变量(PriceSum(中是合乎逻辑的;Cart.PriceAllContent";所有物

C#

//Instantiating Cart
  Cart C2Cart = new Cart();
//Getting Item in cart from Session
  C2Cart.TakeCart();
//Writing out result
  Response.Write(C2Cart.PriceAllContent);

类别

public class Cart
{
    //FIELDS    
    private List<ProductsInCart> _cartList;
    
    //PROPERTIES
    public List<ProductsInCart> CartList
    {
        get { return _cartList; }
        set { _cartList = value; }
    }

    public float PriceAllContent
    {
        get
        {
            float PriceSum= 0;
            foreach (var ProductsInCart in _cartList)
            {
                PriceSum= +ProductsInCart.Price;
            }
            return PriceSum;
        }
    }
  ...........
}
public class ProductsInCart
{
    //FIELDS
    private int _id;
    private string _name;
    private float _price;
    private int _amount;
............
}

完整的类代码可以在这里看到(可能还没有完全更新。如果需要,请询问(https://github.com/chmodder/PlanteskoleWebsite/tree/master/App_Code

问题

问题是,当写出结果时,它只会写出最后一个项目的价格,而不是所有项目价格的总和。

Response.Write(C2Cart.PriceAllContent);

我试着寻找解决方案,但找不到我需要的东西。如果有人能帮我解决这个问题,我会很高兴的

如果您想随着产品价格增加PriceSum变量,请使用+=运算符:

foreach (var ProductsInCart in _cartList)
{
    PriceSum += ProductsInCart.Price; // instead of =+
}

当您编写= +value时,它的两个独立运算符=运算符和+运算符,即+ProductsInCart.Price只返回产品的值,即价格,然后您将此值分配给PriceSum。结果,您将得到列表中最后一个产品的价格。

你也可以使用LINQ代替这个循环:

public float PriceAllContent
{
    get { return _cartList.Sum(p => p.Price); }
}

如何使用foreach获取List对象属性值的总和

=+应该是+=来解决您的问题。

您还可以简化:

public float PriceAllContent
{
    get { return _cartList.Sum(i => i.Price); }
}

尽管按照惯例,我会使用方法CalculatePriceAllContent()而不是属性,向调用方表示您正在进行计算,而不仅仅是获取存储值。看见https://stackoverflow.com/a/601648/1094268

        int sum1;
        List<int> num = new List<int>() {1,2,3,4,5 };
        sum1 = num.Sum();
        Console.WriteLine(sum1);
相关文章: