计算财产总和

时间:2015-04-28 00:54:23

标签: c#

我试图计算名为Total的属性名称与GrandTotal的总和。我希望它做的是GrandTotal计算所有Total的总和,这是我尝试的方式:

public class ItemProperties
        {
            public int Item { get; set; }
            public string Description { get; set; }
            public int Quantity { get; set; }
            public int UnitPrice { get; set; }
            public int Tax { get; set; }
            public int TotalTax { get { return ((Quantity * UnitPrice) * Tax) /100 ; } }
            public int Total { get { return (Quantity * UnitPrice) + TotalTax; } }

            public int GrandTotal
            {
                get
                {
                    foreach (var l in Total) //Error
                        l += Total;          // Error
                    return l;                //Error
                }
            }
        } 

使用ItemProperties方法添加类Add()两次,如下所示: (所以Total每个添加都有不同的值)

 Items.Add(new ItemProperties {
    Item = Convert.ToInt32(lines[i]),
    Description = lines[i + 1],
    Quantity = Convert.ToInt32(lines[i + 2]),
    UnitPrice = Convert.ToInt32(lines[i + 3]),
    Tax = Convert.ToInt32(lines[i + 4])
});
Items.Add(new ItemProperties {
    Item = Convert.ToInt32(lines[i + 5]),
    Description = lines[i + 6],
    Quantity = Convert.ToInt32(lines[i + 7]),
    UnitPrice = Convert.ToInt32(lines[i + 8]),
    Tax = Convert.ToInt32(lines[i + 9])
});

不要担心lines个变量,它们并不相关...... 我唯一想要的是GrandTotal计算所有Total属性的总和。

3 个答案:

答案 0 :(得分:5)

您无法对无法枚举的内容执行foreach - 您的Total属性为int,而非IEnumerable。

您的GrandTotal属性应该在包含ItemProperties集合的类中,您的代码看起来与此类似:

public ItemProperties[] MyItems { get; set; }

public int GrandTotal 
{
    get 
    {
        var total = 0;
        foreach (var item in MyItems)
            total += item.Total;

        return total;
    }
}

或者如果你想使用LINQ:

public List<ItemProperties> MyItems { get; set; }

public int GrandTotal 
{
    get {  return MyItems.Sum(item => item.Total); }
}

请注意,我保持这个简单,不包括任何空检查代码等 - 这是你完成的练习。

答案 1 :(得分:3)

您无法计算单个项目的1000000/333334 => 2.999994 。您需要在项目集合上执行此操作。该属性对单个项目没有意义,应该删除。

C#提供了计算总数的简便方法:

GrandTotal

如果您需要探索具有var grandTotal = Items.Sum(item => item.Total); 属性的类,请将列表包装在自定义类中,并将该属性放在GrandTotal类上。

答案 2 :(得分:1)

总计不是IEnumerable(例如列表)。尝试在单个项目上提供GrandTotal属性没有意义吗?你可能想要的是一种获得List<ItemProperties>的GrandTotal的方法,你可以使用与你所拥有的代码非常相似的代码:

List<ItemProperties> ListOfItems = new List<ItemProperties>();
// fill the list
int sum;

foreach (ItemProperties ip in ListOfItems)
{
    sum += ip.Total;
}

您也可以使用LINQ来代替显式的foreach循环:

int sum = ListOfItems.Sum(x => x.Total);