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

C#构造函数疑问:为何无法用用户输入变量作为对象名称?

为什么不能用用户输入的变量名创建对象?

兄弟,我一眼就看出你这儿的问题了——你混淆了编译时的变量标识符和运行时的字符串数据这俩核心概念,咱们一步步拆解:

1. 那行代码报错的根本原因

你写的 Student (studentName) = new Student (studentName, studentID) 犯了两个关键错误:

  • 语法错误:(studentName) 这种写法完全不符合C#的变量声明规则,括号在这里是多余且非法的;
  • 逻辑错误:studentName 是用户运行时输入的字符串变量,而C#要求变量名必须是编译时就确定的合法标识符(比如字母、下划线开头,不能是字符串值)。你没法用一个运行时的字符串来给变量命名——编译器根本不知道这个“变量名”到底是什么,也没法在后续代码里引用它。

2. 你的真实需求应该是什么?

你想要的肯定不是“给变量起和学生名一样的名字”(就算能做到,你也没法在代码里动态引用这个变量),而是把创建好的Student对象存储起来,方便后续查找/使用。刚好你已经定义了一个Dictionary<int, Student> students,这正是用来干这个的!

3. 修正后的代码示例

我帮你把addStudent方法修正并格式化了,重点是把创建的对象存入字典,而不是纠结变量名:

public class Student 
{
    public static int Count = 0;
    public int ID { get; set; }
    public string Name { get; set; }
    // 注意:这里建议把字典设为静态,否则每个Student实例都会有一个独立的字典
    public static Dictionary<int, Student> students = new Dictionary<int, Student>();

    public Student(string name, int id) 
    {
        Name = name;
        ID = id;
    }

    public static void addStudent() 
    {
        Student.Count++;
        Console.Write("Please enter student's name: ");
        string studentName = Console.ReadLine();
        Console.WriteLine("Student ID value: {0}", Student.Count);
        int studentID = Student.Count;

        // 正确创建对象并存入字典
        Student newStudent = new Student(studentName, studentID);
        students.Add(studentID, newStudent);

        // 如果你想通过名字查找,可以额外维护一个按名字索引的字典(注意处理重名)
        // public static Dictionary<string, List<Student>> studentsByName = new Dictionary<string, List<Student>>();
        // if (!studentsByName.ContainsKey(studentName))
        // {
        //     studentsByName[studentName] = new List<Student>();
        // }
        // studentsByName[studentName].Add(newStudent);
    }
}

额外提示

  • 原来的students字典是非静态的,这意味着每个Student实例都会创建一个新字典,这显然不符合你“存储所有学生”的需求,所以我把它改成了static;
  • 如果需要通过学生名字查找,建议用Dictionary<string, List<Student>>来处理重名情况,避免覆盖数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:16:45