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