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

C#点击按钮时如何每次创建名称不同的User类新对象?

问题解答

1. ???位置的填写规则

???是你声明的User类型变量的名称,只要符合C#标识符命名规则可以随便填,比如最直接填user即可:

User user = new User(name,age,id);

但要注意:如果你只在按钮点击事件方法内部声明这个局部变量,每次点击确实会生成新的User实例,但方法执行结束后这个局部变量就会超出作用域,之前创建的实例会被垃圾回收,你无法在其他位置访问到历史创建的对象。另外C#是静态编译语言,不存在运行时动态生成不同变量名的实现方式,你不需要给每个新对象单独起不同的变量名。

2. 每次点击创建并留存不同User对象的实现方式

你需要在窗体类的层级定义一个集合容器,用来存储每次点击生成的新实例,而不是把对象只存在方法的局部变量里。参考实现代码如下:

public partial class YourWindow : Window // 你自己的窗体类
{
    // 类层级定义集合,存储所有创建过的User对象,不会随点击事件结束被回收
    private List<User> _allUsers = new List<User>();

    // 修正后的User类,补充公开属性方便外部读取字段值
    public class User
    {
        private string name;
        private int age;
        private int id;

        public User(string name, int age, int id) 
        { 
            this.name = name;
            this.age = age;
            this.id = id;
        } 

        // 公开只读属性,外部可以访问到对象存储的值
        public int Id => id;
        public string Name => name;
        public int Age => age;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        // 加输入校验,避免用户输入非数字导致转换报错
        if (!int.TryParse(tb2.Text, out int age) || !int.TryParse(tb3.Text, out int id))
        {
            MessageBox.Show("年龄和ID必须输入合法数字");
            return;
        }
        string name = tb1.Text.Trim();
        
        // 每次点击创建新的User实例
        User newUser = new User(name, age, id);
        // 将新实例存入集合,所有历史创建的对象都会被保留
        _allUsers.Add(newUser);

        // 如果你需要通过ID快速查找对应对象,可以把List替换为Dictionary<int, User>
        // 定义时写private Dictionary<int, User> _userDict = new Dictionary<int, User>();
        // 存入时写_userDict.Add(id, newUser); 注意要保证ID唯一,否则会抛出重复键异常
    }
}

注意事项

  • 不需要追求给每个对象设置不同的变量名,所有实例都存在集合中后,你可以通过索引、ID等标识快速找到对应的对象,和不同变量名的效果完全一致。
  • 原代码中User类的三个字段都是private私有修饰,外部创建对象后无法读取内部存储的name、age、id值,必须补充公开的访问属性才能正常使用对象数据。
  • 直接用Convert.ToInt32做转换存在风险,用户输入非数字内容时会直接抛出程序异常,建议改用int.TryParse做输入合法性校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 05:24:29