我正试图让我的购物车识别是否已经将商品添加到购物车,然后将数量更新为另一个,但是它只会使该语句为false。
这是我的页面加载处理程序,它根据查询字符串中发送的详细信息创建新产品。
~/elixir_programs$ iex
Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]
Interactive Elixir (1.6.6) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> c "my.exs"
[My, Statcasters.Questions.Reserved]
iex(2)> My.go
%{
__meta__: "hello world",
__struct__: "boo hoo",
active: true,
description: "player points",
id: 118,
inserted_at: ~N[2018-08-26 19:48:22.501445],
reserved: %Statcasters.Questions.Reserved{
information: %{
game_id: "b796cbe9-0bb6-4aaf-98b0-5da81c337208",
player_id: 12345,
player_name: "Lebron James"
},
inputs: [%{label: "Player Points", type: "text"}]
},
type: "NBA",
updated_at: ~N[2018-08-26 19:48:22.504193]
}
iex(3)>
答案 0 :(得分:1)
这里有很多问题。首先,如果您要像这样添加到ArrayList
:
shoppingCart.Add(newProduct)
然后您将添加Product
个对象。在这种情况下,您为什么希望这会有用:
If (shoppingCart.Contains(newProduct.itemID)) Then
newProduct.itemID
大概是Integer
之类的东西,因此当然集合中不包含它。它不包含任何Integer
值,因为它包含Product
个对象。您需要检查它是否包含一个带有Product
的{{1}}对象,而不是它是否直接包含那个itemID
。我将替换所有这些内容:
itemID
与此:
If Session("shoppingCartSession") Is Nothing Then
shoppingCart = New ArrayList()
shoppingCart.Add(newProduct)
Session("shoppingCartSession") = shoppingCart
ElseIf (shoppingCart.Contains(newProduct.itemID)) Then
For Each item As Product In shoppingCart
If item.Equals(Request.QueryString("ProductCode")) Then
item.updateQuantity()
End If
Next
Else
shoppingCart = CType(Session("shoppingCartSession"), ArrayList)
shoppingCart.Add(newProduct)
Session.Add("shoppingCartSession", shoppingCart)
End If
也就是说,我还将遵循@VisualVincent的建议,并使用shoppingCart = TryCast(Session("shoppingCartSession"), ArrayList)
If shoppingCart Is Nothing Then
shoppingCart = New ArrayList
Session("shoppingCartSession") = shoppingCart
End If
Dim existingProduct = shoppingCart.Cast(Of Product)().
SingleOrDefault(Function(p) p.itemID = newProduct.itemID)
If existingProduct Is Nothing Then
shoppingCart.Add(newProduct)
Else
existingProduct.updateQualtity()
End If
而不是List(Of Product)
。如果这样做,则可以在我建议的代码中省略ArrayList
调用。