我试图计算名为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属性的总和。
答案 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);