如何检查arraylist是否已经包含对象

时间:2018-08-27 04:23:15

标签: asp.net vb.net webforms

我正试图让我的购物车识别是否已经将商品添加到购物车,然后将数量更新为另一个,但是它只会使该语句为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)> 

1 个答案:

答案 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调用。