For loop 检查列表中是否已存在同名但值不同的项

For loop 检查列表中是否已存在同名但值不同的项,for-loop,For Loop,我有一个叫做BasketItem的物品清单。BasketItem具有不同的属性、标题、id和格式。我将BasketItems添加到列表中,但是当添加两个标题/id相同但格式不同的BasketItems时,我希望将其Price属性更改为0 例如,我有book1,可以将其添加到MOBI或EPUB中。如果我将MOBI中的book1添加到我的列表中,则价格为3.99,因此总价为3.99。如果我添加EPUB,我希望总数保持在3.99,但是如果我以0的价格添加它,如果我从列表中删除book1 MOBI,那么

我有一个叫做BasketItem的物品清单。BasketItem具有不同的属性、标题、id和格式。我将BasketItems添加到列表中,但是当添加两个标题/id相同但格式不同的BasketItems时,我希望将其Price属性更改为0

例如,我有book1,可以将其添加到MOBI或EPUB中。如果我将MOBI中的book1添加到我的列表中,则价格为3.99,因此总价为3.99。如果我添加EPUB,我希望总数保持在3.99,但是如果我以0的价格添加它,如果我从列表中删除book1 MOBI,那么总值将为0,因为剩余的book具有该属性

我需要总价计算器检查一下,或者做点别的

我尝试用两个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; }
对于一个更简单的exmaple:当我添加到一个篮子中时,我简单地将一个篮子项目添加到一个篮子项目列表中

我有一个计算总价的篮子财产:

                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,它将变为7.98,因为有两本不同的书

来自C#中VB注释的代码

public decimal BasketTotal{
得到{
十进制总价=0;
对于(int i=0;i=0;j--)
{
if(BasketItems[i].Title==BasketItems[j].Title&&BasketItems[i].FormatType!=BasketItems[j].FormatType)
{
existsPre=true;
打破
}
}
如果(!existsPre)
{
总价+=篮子物品[i]。单价;
}
}
返回总价;
}
}

您可以使用此伪代码(对不起,我认为是用VB.NET语言编写的):

对于BasketItems,i为整数=0。计数-1
Dim BlnexistAnotherFormat为布尔值=False
对于j,作为整数=i到0步骤-1
如果篮子项目(i).标题=篮子项目(j).标题和_
BasketItems(i).FormatType BasketItems(j).FormatType Then
blnexitsanotherformat=True
退出
如果结束
下一个j
如果不是BLNEXITSANOTHER格式,则
总价+=篮子物品(i).单价
如果结束
接下来我

你能简化你的示例,并展示一些代码示例吗?添加了两个循环和另一个示例。我在我的帖子中添加了我的c#代码,但是当我在篮子中找到一个项目,甚至两个不同的项目时,它就起作用了。但是两个相同类型的不同格式不起作用。我可能要用我从VB转换到C的方式来做,第二个循环必须是从你正在分析的项目开始的反向循环。您还必须在第一个foreach的每个循环上重置existsPre=false。我反转了列表,然后在第二个for循环中进行了筛选,但它仍然有相同的错误。它使两者的值都为0,而不是1。Posted I反转列表I filter Through反转循环必须从您正在分析的位置开始;如果您有一个包含10个项目的列表,并且正在分析第3个项目,则只需检查前两个项目是否包含不同格式的相同标题。对不起,我的英语不好。
        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;
        }
    }
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