存储在Array中的C#类数组

时间:2015-04-23 11:15:49

标签: c# arrays class

多维数组的新手,我正在研究一个小项目。

当我尝试将2个数组(学生和教师)存储到课程数组中时,将它们创建为类数组时出现错误

以下是我main()

的代码
Student stud1 = new Student("Alex", "Kelly", DateTime.Parse("14/07/2000"));
Student stud2 = new Student("Tom", "Smith", DateTime.Parse("16/08/198
Student stud3 = new Student("Mary", "Jones", DateTime.Parse("10/01/1998"));

//add students to an array and get the count
Student[] studentArray = new Student[3] { stud1, stud2, stud3 };
int count1 = studentArray.Length;

//add teacher objects
Teacher prof1 = new Teacher("Beckham");
Teacher prof2 = new Teacher("Pele");
Teacher prof3 = new Teacher("Maradonna");
Teacher[] teacherArray = new Teacher[3] { prof1, prof2, prof3 };

 //course Object
 Course course1 = new Course("Programming with C#");
 Course[,] courseList = new Course[,] { {studentArray} , { teacherArray } };

当我尝试将{ studentArray, teacherArray }添加到courseList数组时,我在显示的最后一行收到错误。

错误是

  

无法将Student[]类型隐式转换为Course

如果我将数组从Course更改为object [,],则可以正常使用

我是否需要在课程文件中添加内容?

4 个答案:

答案 0 :(得分:4)

看起来您的代码可以重构。

例如,为什么Course类看起来不像:

class Course
{
    public string Name;
    public List<Student> Students;
    public List<Teacher> Teachers;
}

这是更自然和对象的方式。在这种情况下,您不需要二维数组,并且只能使用List<Course>

另请注意 - 在许多情况下List<T>T[]数组更方便,因为它会自动调整大小。

答案 1 :(得分:3)

您遇到的错误是因为Course数组只允许Course类型的对象。你不能用它来放置其他对象或数组。

要解决您的问题,最好将StudentTeacher数组作为Course对象的属性。然后可以根据需要为这些值分配值。

请参阅:

https://msdn.microsoft.com/en-us/library/9b9dty7d.aspx有关数组的信息。 https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx了解有关房产的信息。

在编辑后更新

object[,]数组将起作用,因为object是所有其他类型的基本类型。因此,object[]可以为其分配任何其他类型。正如您所说,您正在学习编程,因此可能值得阅读面向对象设计 - 它将帮助您更好地建模数据。首先尝试https://msdn.microsoft.com/en-us/library/dd460654.aspx

答案 2 :(得分:0)

你应该尝试做的是使用OBJECT ARRAYS。该数组将存储不同的对象,并且还将保留其形式。 看看这个链接。它在这个主题上非常详细。 enter link description here

答案 3 :(得分:0)

要扩展之前的答案,请始终考虑如何分离数据。例如,课程本身就是一个非常“静态”的课程。与参加者和导师相比的概念。课程甚至可以有不同的参与者等不同的日期,但不会改变日期和相关的日期。

所以你的模型可能是:

public class CourseSchedule
{
    public CourseSchedule(Course course, Student[] students, Teacher[] teacher)
    {
        this.Course = course;
        ....
    }

    // Some sort of Date too

    public Course Course { get; private set; }

    public IEnumerable<Student> Students { get; private set; }

    public IEnumerable<Teacher> Teachers { get; private set; }
}

多维数组值得理解,但特定于某些类型的编程 - 图形,数学变换等。您倾向于将它们用于低级编码,但是对于现实世界结构的建模,例如您的课程预订,它们通常不合适