我有一个名为BasketItem的对象列表。 BasketItem具有不同的属性,标题,ID和格式。我将BasketItems添加到列表中,但是当添加两个具有相同title / id但不同格式的BasketItem时,我想将其Price属性更改为0.
例如,我有book1并可以将其添加到MOBI或EPUB中。如果我将MOBI中的book1添加到我的列表中,价格为3.99,因此总价格为3.99。如果我然后添加EPUB我希望总数保持3.99但是如果我以0的价格添加它,如果我从列表中删除book1-MOBI,则总值将为0,因为剩余的书具有该属性。
我需要总价计算器来检查或其他。
我尝试使用两个for循环检查ID是否相同但格式不同但是我无法确定如何使其工作。
购物篮商品属性:
public int ID { get; set; }
public string ReferenceNumber { get; set; }
public decimal UnitPrice { get; set; }
public string Title { get; set; }
public string FormatType { get; set; }
public int BaskID { get; set; }
public bool AddedToBask { get; set; }
对于一个更简单的例子:当我添加到一个篮子时,我简单地将一个BasketItem添加到一个BasketItems列表中
我有一个篮子属性,用于计算总价格:
foreach (BasketItem item in BasketItems)
{
foreach (BasketItem bskItem in BasketItems)
{
if(item == bskItem)
{
totalPrice += item.UnitPrice;
}
}
}
return totalPrice;
当一个名称/ ID相同的项目在购物篮中时,您只需为多种格式支付一个价格。 这意味着您将book1-MOBI添加到篮子中,价格为3.99,因此篮子总数达到3.99。 如果您将book1-EPUB添加到购物篮中,那么购物篮的总数将保持3.99,因为它只是不同的格式。 如果你之后添加了book2-MOBI,那么它会从2本不同的书中获得7.98。
来自VB的代码C#中的评论
public decimal BasketTotal {
get {
decimal totalPrice = 0;
for (int i = 0; i < BasketItems.Count; i++)
{
bool existsPre = false;
for (int j = i; j >= 0; j--)
{
if(BasketItems[i].Title == BasketItems[j].Title && BasketItems[i].FormatType != BasketItems[j].FormatType)
{
existsPre = true;
break;
}
}
if (!existsPre)
{
totalPrice += BasketItems[i].UnitPrice;
}
}
return totalPrice;
}
}
答案 0 :(得分:0)
您可以使用此伪代码(抱歉,我认为在VB.NET语言中):
For i as Integer = 0 To BasketItems.Count - 1
Dim blnExistsAnotherFormat as Boolean = False
For j as Integer = i To 0 Step -1
If BasketItems(i).Title = BasketItems(j).Title And _
BasketItems(i).FormatType <> BasketItems(j).FormatType Then
blnExistsAnotherFormat = True
Exit For
End If
Next j
If Not blnExistsAnotherFormat Then
TotalPrice += BasketItems(i).UnitPrice
End If
Next i