C#中能否使用变量或用户输入值作为新建对象的变量名
解决方案
你期望的直接将邮箱字符串作为变量名的写法在C#中无法实现,原因有两点:
- C#是静态编译语言,局部变量名必须在编译阶段就确定,无法在运行时根据用户输入动态生成变量名
- 邮箱地址中包含的
@、.等符号不符合C#标识符的命名规则,无法直接作为变量名使用
替代实现方案
你可以通过Dictionary<string, Client>字典结构存储客户端实例,以邮箱作为键匹配对应实例,完全可以满足你通过邮箱定位实例调用方法的需求。
步骤1:声明字典
在合适的作用域(全局或者当前方法开头)声明字典用于存储所有客户端实例:
Dictionary<string, Client> clientMap = new Dictionary<string, Client>();
步骤2:修改实例创建逻辑
修改你的原有代码,将新建的客户端实例存入字典:
Console.WriteLine("Full Name:"); string name = Console.ReadLine(); Console.WriteLine("Email:"); string email = Console.ReadLine(); Console.WriteLine("Address:"); string address = Console.ReadLine(); Console.WriteLine("Password:"); string password = Console.ReadLine(); // 以邮箱为键存储实例 clientMap.Add(email, new Client(name, email, address, password));
步骤3:调用实例方法
需要调用指定邮箱对应实例的方法时,写法如下:
clientMap["John@gmail.com"].Classmethod();
- 若要避免重复邮箱存入时报错,可以先调用
clientMap.ContainsKey(email)判断是否存在该邮箱对应的实例后再做新增/更新操作。
内容的提问来源于stack exchange,提问作者Mitchellb
相关产品推荐
相关产品推荐

