创建一个类构造函数,该构造函数根据参数(C#)初始化其他类型的对象变量

创建一个类构造函数,该构造函数根据参数(C#)初始化其他类型的对象变量,c#,class,parameters,constructor,C#,Class,Parameters,Constructor,我是新的编码,所以我希望这是明确的 我创建了两个新班级:一个是学生,一个是成绩册。其施工人员如下: Student(string studentName, string gradeBookTitle); Gradebook(double testWeight, double quizWeight, double assignmentWeight, string[] studentNameArray); 我想使用Gradebook.studentNameArray参数中的

我是新的编码,所以我希望这是明确的

我创建了两个新班级:一个是学生,一个是成绩册。其施工人员如下:

Student(string studentName, string gradeBookTitle);

Gradebook(double testWeight, double quizWeight, 
          double assignmentWeight, string[] studentNameArray);
我想使用Gradebook.studentNameArray参数中的名称为每个名称初始化学生对象。这样,当用户创建成绩册时,他们会自动为班级中的每个学生创建一个学生对象


但是,我遇到了一些问题,因为您无法使用数组的内容来命名新变量。我想我是想得太多了。。。有没有更简单的方法来组织这一切?或者在构造函数中创建这些学生变量的另一种方法?

您可以从studentNameArray在构造函数中填充student类型的列表。然而,野外年龄不会设置为这样做。如果还想设置年龄,则需要返回并修改列表,或者将studentNameArray参数更改为list类型的参数

private List<Student> _students;
private string _title;

public Gradebook(double testWeight, double quizWeight, 
          double assignmentWeight,  string[] studentNameArray)
{
    this._testWeight = testWeight;
    this._quizWeight = quizWeight;
    this._assignmentWeight = assignmentWeight;
    this._students = new List<Student>;

    foreach(var name in studentNameArray)
    {
        _students.Add(new Student(name, 0, this._title);
    }
}
private List\u学生;
私有字符串\u标题;
公开成绩册(双倍测重、双倍测重、,
双赋值权重,字符串[]studentNameArray)
{
这个._testWeight=testWeight;
这个._quizWeight=quizWeight;
此._assignmentWeight=assignmentWeight;
这个。_学生=新列表;
foreach(studentNameArray中的变量名)
{
_添加(新学生(姓名,0,此._标题);
}
}

你可以使用
字典,其中
键是学生的名字。有点像这样(在这里做一些假设,但希望这能告诉你基本想法):

公共IDictionary StudentDictionary{get;set;} 公开成绩册(双倍测重、双倍测重、, 双赋值权重,字符串[]studentNameArray){ StudentDictionary=新字典(); foreach(studentNameArray中的变量名){ 添加(姓名,新学生(姓名,this.Title)); } }
User..学生是否有其他构造函数,或者您希望在构造函数中设置哪些默认值。类似的操作可以完成

class Gradebook
{
    public Gradebook(double testWeight, double quizWeight, double assignmentWeight, string[] studentNameArray)
    {
        this.TestWeight = testWeight;
        this.QuizWeight = quizWeight;
        this.AssingmentWeight = assignmentWeight;
        this.Students = new List<Student>();
        foreach(var name in studentNameArray)
            Students.Add(new Student(
                studentName: name, 
                age: 0,
                gradeBookTitle: ""
                )
            );
    }

    public double TestWeight { get; set; }

    public double QuizWeight { get; set; }

    public double AssingmentWeight { get; set; }

    public IList<Student> Students { get; set; }
}

class Student
{
    public Student(string studentName, int age, string gradeBookTitle)
    {

    }
}
班级成绩册
{
公开成绩册(双倍测试权重、双倍quizWeight、双倍赋值权重、字符串[]studentNameArray)
{
this.TestWeight=TestWeight;
this.QuizWeight=QuizWeight;
this.AssingmentWeight=分配权重;
this.Students=newlist();
foreach(studentNameArray中的变量名)
学生。添加(新学生)(
学生姓名:,
年龄:0,,
书名:“
)
);
}
公共双测试权重{get;set;}
公共双QuizWeight{get;set;}
公共双分配权重{get;set;}
公共IList学生{get;set;}
}
班级学生
{
公立学生(string studentName、int age、string gradeBookTitle)
{
}
}

我遇到了问题,因为你不能用数组的内容来命名一个新变量
什么?@PrestonGuillot OP问了很多新程序员同样的问题:如何动态命名一个变量..这几乎总是一个错误的问题。@SimonWhitehead,想解释一下为什么它是错误的q吗问题?通常有一种更圆滑的方法吗?没有一种方法可以做到这一点。这就是为什么这是一个错误的问题。如果你正在进入“不可能做到”的阶段territory,您通常会考虑您试图错误地执行的操作。如果您在创建成绩册时没有年龄信息,为什么要初始化一个学生对象,并将年龄作为必需参数?看起来您只有一个学生姓名列表,没有年龄。如果两个学生姓名相同,会发生什么情况?可能是什么他通过使用字典得到了什么?这里的列表似乎更合适。“在这里做一些假设”。其中之一是学生的名字足够独特。
class Gradebook
{
    public Gradebook(double testWeight, double quizWeight, double assignmentWeight, string[] studentNameArray)
    {
        this.TestWeight = testWeight;
        this.QuizWeight = quizWeight;
        this.AssingmentWeight = assignmentWeight;
        this.Students = new List<Student>();
        foreach(var name in studentNameArray)
            Students.Add(new Student(
                studentName: name, 
                age: 0,
                gradeBookTitle: ""
                )
            );
    }

    public double TestWeight { get; set; }

    public double QuizWeight { get; set; }

    public double AssingmentWeight { get; set; }

    public IList<Student> Students { get; set; }
}

class Student
{
    public Student(string studentName, int age, string gradeBookTitle)
    {

    }
}