You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB中如何使用列表参数实例化对象并将选中菜单项加入订单列表

实现步骤

1. 修正MenuItem定义与菜单列表初始化

你原有的菜单初始化逻辑直接把Cost和输入框文本绑定并不合理,建议先存储菜品基础单价,后续根据用户输入的购买数量动态计算对应费用,修改后的参考代码如下:

' 首先完善MenuItem类的结构
Public Class MenuItem
    Public Property Name As String
    Public Property BaseCost As Decimal ' 存储单品基础售价
    Public Property Quantity As Integer ' 存储用户购买的数量
    ' 只读属性自动计算当前菜品的总费用
    Public ReadOnly Property TotalCost As Decimal
        Get
            Return BaseCost * Quantity
        End Get
    End Property
End Class

' 初始化可选菜品列表,仅存储基础信息
Dim menu As New List(Of MenuItem) From
{
    New MenuItem With {.Name = "Burger", .BaseCost = 2.0D},
    New MenuItem With {.Name = "wrap", .BaseCost = 2.0D},
    New MenuItem With {.Name = "Parmesan", .BaseCost = 2.5D},
    New MenuItem With {.Name = "Stirfry", .BaseCost = 3.0D},
    New MenuItem With {.Name = "pitta", .BaseCost = 2.5D}
}

2. 实例化Order对象与传入选中菜品参数

每次用户提交订单时先实例化Orders类的对象,再遍历所有菜品对应的输入框,只要用户输入了大于0的购买数量,就创建对应MenuItem实例传入AddItem方法即可,参考逻辑如下:

' 提交订单按钮的点击事件示例
Private Sub btnSubmitOrder_Click(sender As Object, e As EventArgs) Handles btnSubmitOrder.Click
    ' 每次新建订单都实例化一个新的Orders对象,存储本次订单的所有选中菜品
    Dim currentOrder As New Orders()

    ' 逐个处理每个菜品的购买数量
    ' 处理汉堡
    Dim burgerQty As Integer = 0
    If Integer.TryParse(txtburger.Text, burgerQty) AndAlso burgerQty > 0 Then
        Dim burgerItem As New MenuItem With {
            .Name = "Burger",
            .BaseCost = 2.0D,
            .Quantity = burgerQty
        }
        currentOrder.AddItem(burgerItem)
    End If

    ' 处理卷饼
    Dim wrapQty As Integer = 0
    If Integer.TryParse(txtwrap.Text, wrapQty) AndAlso wrapQty > 0 Then
        Dim wrapItem As New MenuItem With {
            .Name = "wrap",
            .BaseCost = 2.0D,
            .Quantity = wrapQty
        }
        currentOrder.AddItem(wrapItem)
    End If

    ' 剩余的帕玛森菜品、炒物、皮塔饼都按照上述逻辑依次处理即可

    ' 后续计算订单总价直接累加Items列表的TotalCost即可
    Dim orderTotal As Decimal = currentOrder.Items.Sum(Function(item) item.TotalCost)
    MessageBox.Show($"订单总价为:{orderTotal:C}")
End Sub

3. 多份同菜品的处理方案

如果用户只是购买多份相同且无特殊要求的菜品,不需要实例化多个对象,直接给对应MenuItem的Quantity属性赋值为购买数量即可,成本会通过TotalCost自动计算。如果业务需要单独记录每一份菜品的特殊属性(比如加不加配料、备注要求),才需要实例化多个同名的MenuItem对象分别添加,示例如下:

' 示例:用户买2个汉堡,一个加芝士一个不加,需要单独实例化
Dim burger1 As New MenuItem With {.Name = "Burger(加芝士)", .BaseCost = 2.5D, .Quantity =1}
Dim burger2 As New MenuItem With {.Name = "Burger(不加芝士)", .BaseCost = 2.0D, .Quantity =1}
currentOrder.AddItem(burger1)
currentOrder.AddItem(burger2)

内容的提问来源于stack exchange,提问作者Hamza Asim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:48:00