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

时间:2014-05-27 14:06:19

标签: c# list oop foreach

我正在尝试做什么

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

我是如何解决它的

我认为将它添加为Cart-class中的属性是有意义的。 我还认为使用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);

我已经尝试过寻找解决方案,但找不到我需要的东西。 如果有人能帮助我解决这个问题,我会很幸福。

3 个答案:

答案 0 :(得分:6)

如果您想使用产品价格增加PriceSum变量,请使用+= operator

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

当您撰写= +value时,其两个独立的运算符= operator+ operator+ProductsInCart.Price只返回product,price的值,然后将此值分配给{{ 1}}。因此,您将获得列表中最后一个产品的价格。

您也可以使用LINQ代替此循环:

PriceSum

答案 1 :(得分:2)

=+应为+=以解决您的问题。

您还可以简化:

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

虽然作为惯例,我使用方法CalculatePriceAllContent()而不是属性来向呼叫者表明您正在进行计算,而不仅仅是获取存储值。见https://stackoverflow.com/a/601648/1094268

答案 2 :(得分:0)

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