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

多类交互代码优化咨询:商品展示类及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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:53:00