C# 编辑列表集合问题:错误注释集合已修改;枚举操作不能执行

C# 编辑列表集合问题:错误注释集合已修改;枚举操作不能执行,c#,asp.net,vb.net,C#,Asp.net,Vb.net,我有以下课程: Product, Service and OrderItem 产品和服务必须继承订单项。所以基本上我想在我的购物车中存储OrderItem对象,这些对象存储在一个列表中 Public MustInherit Class OrderItem Private m_enuItemType As TypeOfItem = TypeOfItem.None Private m_strUserID As Integer Private m_UserName As St

我有以下课程:

Product, Service and OrderItem
产品
服务
必须继承
订单项
。所以基本上我想在我的购物车中存储
OrderItem
对象,这些对象存储在一个列表中

Public MustInherit Class OrderItem
    Private m_enuItemType As TypeOfItem = TypeOfItem.None
    Private m_strUserID As Integer
    Private m_UserName As String
    Private m_Currency As String
    Private m_CurrencyType As Decimal
    Private m_MiniCartSubTotal As Decimal

    Public Sub New(ByVal enuItemType As TypeOfItem)
        m_enuItemType = enuItemType
    End Sub

    Public Enum TypeOfItem
        None = 0
        Product = 1
        Service = 2
    End Enum

    Public Property ItemType() As TypeOfItem
        Get
            Return m_enuItemType
        End Get
        Set(ByVal value As TypeOfItem)
            m_enuItemType = value
        End Set
    End Property
End Class
类产品

Public Class CartProduct
    Inherits OrderItem

    Private Product_Id As String = ""
    Private Qty As Integer = Nothing
    Private price As String = ""
    Private priceFormat As String = ""
    Private UserPrice As Decimal = 0

    Public Sub New(ByVal enuItemType As TypeOfItem)
        MyBase.New(enuItemType)
    End Sub

    Public Property ProductId() As String
        Get
            Return Product_Id
        End Get
        Set(ByVal value As String)
            Product_Id = value
        End Set
    End Property

End Class
这是我的问题:当用户添加产品时,我想验证该产品是否已经存在于列表中。如果有,我想增加值,但我有一个错误。以下是我的add orderItem代码:

Public Function AddItem(ByVal objOrderItem As OrderItem) As Boolean

    Try

        If m_objArrListOfItems.Count > 0 Then

         ' Validate item to check if it is already in the list
        ' If yes, increment counter, otherwise add new item to the list

            Dim objValidateCartProduct As New CartProduct(OrderItem.TypeOfItem.Product)
            Select Case objOrderItem.ItemType
                Case OrderItem.TypeOfItem.Product
                    objValidateCartProduct = DirectCast(objOrderItem, CartProduct)
            End Select


            For Each p As CartProduct In m_objArrListOfItems
                If objValidateCartProduct.ProductId = p.ProductId Then
                    p.OrderQty = p.OrderQty + objValidateCartProduct.OrderQty

                Else
                    m_objArrListOfItems.Add(objOrderItem)
                End If

            Next


        Else
            m_objArrListOfItems.Add(objOrderItem)

        End If

    Catch ex As Exception
        MsgBox(ex.ToString)
        ' Log error
    End Try

End Function

最简单的解决方案是对这类内容使用for循环。我还没有测试过这段代码,但应该是这样的:

for (int i = 0; i < m_objArrListOfItems.Count; i++)
{
    Product p = m_objArrListOfItems[i];
    if (objValidateCartProduct.ProductID == p.ProductID)
    {
        p.OrderQty += objValidateCartProduct.OrderQty;
        break;
    }
    m_objArrListOfItems.Add(objOrderItem);        
}

感谢您的回复代码正常工作,但当我单击第一个产品时,我遇到了一个小问题。它添加并保持增量。但是,当我添加第二个产品时,它确实会增加并保持添加一个extrac记录。我假设发生这种情况,因为第二个
ProductID
不匹配
objValidateCartProduct.ProductID
。在这种情况下会发生什么?我尝试了一个if-else条件,我仍然得到相同的结果。听起来你需要对照
objordItem
检查
ProductID
,而不是
objValidateCartProduct
我需要在objordItem中强制转换产品(objValidateCartProduct=DirectCast(objordItem,CartProduct)因为我不能用宾语
For i As Integer = 0 To m_objArrListOfItems.Count - 1
    Dim p As Product = m_objArrListOfItems(i)
    If objValidateCartProduct.ProductID = p.ProductID Then
        p.OrderQty += objValidateCartProduct.OrderQty
        Exit For
    End If
    m_objArrListOfItems.Add(objOrderItem)        
Next