C# 如何为菜单项添加无限数量的可选附加项及对应加价规则
方案选择
推荐选择单套「选项/价格」结构动态添加的方案,不要预定义固定槽位,原因如下:
- 无数量限制:不受预定义的7-8个槽位约束,后续不管单个菜品需要多少附加选项都可以直接扩展,不需要修改底层数据结构
- 适配UI设计:和你设计的卡片布局+添加按钮交互完全匹配,渲染时直接遍历已有的选项集合输出即可,不需要处理空槽位的兼容逻辑
- 维护成本更低:后续如果需要给附加选项增加属性(比如可选数量上限、是否必选、库存状态等),只需要调整选项类的定义即可,不需要修改菜单项的结构
代码结构调整
原有设计让MenuItem继承IMenuOption是不合理的,二者是包含关系而非继承关系,且接口定义的void方法不符合存取选项名、价格的需求,调整后的代码如下:
using System; using System.Collections.Generic; using System.Linq; namespace MenuConsole { // 调整接口定义,用属性替代无返回值方法 public interface IMenuOption { string OptionName { get; set; } decimal OptionPrice { get; set; } } // 附加选项类实现接口 public class MenuAddonOption : IMenuOption { public string OptionName { get; set; } public decimal OptionPrice { get; set; } } // 菜单项类,独立定义,包含附加选项集合 public class MenuItem { public string MenuItemName { get; set; } public decimal MenuItemPrice { get; set; } // 动态存储所有附加选项,没有数量限制 public List<IMenuOption> AddonOptions { get; set; } = new List<IMenuOption>(); // 可选:提供计算选中选项总价的方法,可根据实际需求调整 public decimal GetTotalPrice(List<string> selectedOptionNames) { var addonTotal = AddonOptions .Where(o => selectedOptionNames.Contains(o.OptionName)) .Sum(o => o.OptionPrice); return MenuItemPrice + addonTotal; } } public class Program { static void Main(string[] args) { // 示例用法 var hamburger = new MenuItem { MenuItemName = "牛肉汉堡", MenuItemPrice = 5.99m }; // 动态添加选项,对应UI的添加按钮操作 hamburger.AddonOptions.Add(new MenuAddonOption { OptionName = "培根", OptionPrice = 1.00m }); hamburger.AddonOptions.Add(new MenuAddonOption { OptionName = "蘑菇", OptionPrice = 0.50m }); hamburger.AddonOptions.Add(new MenuAddonOption { OptionName = "芝士", OptionPrice = 0.30m }); Console.WriteLine($"菜品:{hamburger.MenuItemName},基础价:{hamburger.MenuItemPrice:C}"); Console.WriteLine("可选附加项:"); foreach (var option in hamburger.AddonOptions) { Console.WriteLine($"- {option.OptionName}:+{option.OptionPrice:C}"); } } } }
操作说明
- UI点击添加按钮时,只需要实例化一个新的
MenuAddonOption对象,添加到对应MenuItem的AddonOptions集合中,再刷新卡片的选项列表展示即可 - 如果后续需要支持不同类型的附加选项(比如配料类、尺寸类),只需要新增实现
IMenuOption的子类即可,不需要修改现有逻辑
内容的提问来源于stack exchange,提问作者user1895831
相关产品推荐
相关产品推荐

