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
相关产品推荐
相关产品推荐

