多类交互代码优化咨询:商品展示类及Form.cs代码如何更简洁高效?
代码优化建议(针对你的商品展示程序)
嘿,作为编程新手能写出可运行的代码已经超棒了!咱们来一步步优化这些代码,让它更简洁、更符合C#的最佳实践,同时提升可读性和维护性~
一、Item类优化
你的Item类目前有几个小细节问题(比如字段与构造函数参数类型不匹配、缺少属性访问器),而且要让ListBox能正确显示商品信息,我们还需要重写ToString()方法。优化后的代码如下:
public class Item { // 用自动属性替代手动定义私有字段+公共属性,大幅减少冗余代码 public string Name { get; set; } public int Duration { get; set; } public double Cost { get; set; } // 修正类型,匹配构造函数的double参数 // 构造函数直接初始化属性,逻辑更清晰 public Item(string name, int duration, double cost) { Name = name; Duration = duration; Cost = cost; } // 重写ToString,让ListBox显示商品的具体信息,而不是默认的类型名 public override string ToString() { return $"商品名称:{Name} | 售卖时长:{Duration}天 | 成本:{Cost:C}"; } }
优化点说明:
- 采用自动属性简化代码,不用手动写私有字段和get/set逻辑;
- 修正了
Cost的类型冲突问题(原代码私有字段是int,构造函数参数是double); - 重写
ToString()是关键:直接把Item对象加到ListBox时,会自动显示格式化后的商品信息,不用额外处理字符串拼接。
二、Inventory类优化
原来的Inventory类有泛型拼写错误(List<item>应该是List<Item>),我们还可以给它增加批量添加功能,同时保护内部集合不被外部随意修改:
public class Inventory { // 用私有只读List存储商品,避免外部直接操作底层集合 private readonly List<Item> _items = new List<Item>(); // 单个添加商品的方法保留 public void AddItem(Item item) { _items.Add(item); } // 新增批量添加方法,比多次调用AddItem更高效 public void AddItems(IEnumerable<Item> items) { _items.AddRange(items); } // 索引器用表达式体简化写法,更简洁 public Item this[int index] { get => _items[index]; set => _items[index] = value; } // 对外暴露只读的商品集合,方便遍历但不能修改 public IEnumerable<Item> Items => _items.AsReadOnly(); }
优化点说明:
- 修正了泛型类型的拼写错误;
- 新增
AddItems方法支持批量添加商品,减少重复调用; - 用
_items.AsReadOnly()返回只读集合,防止外部代码随意修改内部的商品列表; - 用表达式体成员简化索引器代码,让结构更清爽。
三、Form.cs代码优化
原来的Form1_Load方法里重复代码太多,我们可以用批量操作简化整个流程:
private void Form1_Load(object sender, EventArgs e) { var myInventory = new Inventory(); // 用集合初始化器一次性创建所有商品,比逐个new再Add简洁太多 var items = new List<Item> { new Item("iPod", 200, 9), new Item("Samsung", 700, 5), new Item("Nokia", 100, 17), new Item("Motorolla", 50, 50) }; // 批量添加到Inventory myInventory.AddItems(items); // 一次性把所有商品加到ListBox,替代四次重复的Add调用 lstProduct.Items.AddRange(myInventory.Items.ToArray()); // 额外小提示:如果Inventory暂时没有其他业务逻辑(比如库存统计),甚至可以跳过它,直接加items到ListBox // lstProduct.Items.AddRange(items.ToArray()); }
优化点说明:
- 使用集合初始化器创建商品列表,代码更紧凑易读;
- 调用批量添加方法减少重复代码;
- 用
AddRange一次性完成ListBox的填充,避免多次重复调用Items.Add。
额外小提醒
- 命名规范:C#里类名、属性名用PascalCase(首字母大写),私有字段用_camelCase(下划线+小写开头),这是行业通用规范,能让代码更易读;
- 如果后续要做更复杂的商品展示,比如多列显示、排序筛选,可以考虑用DataGridView绑定数据源,比ListBox更灵活。
内容的提问来源于stack exchange,提问作者Gegee
相关产品推荐
相关产品推荐

