Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 学生=(FileRoutines.LoadStudents(STUDENT_文件));_C# - Fatal编程技术网

C# 学生=(FileRoutines.LoadStudents(STUDENT_文件));

C# 学生=(FileRoutines.LoadStudents(STUDENT_文件));,c#,C#,我在上C课,我有一个项目。该项目为void Main编写了代码。以下是主要代码的第一部分: 我要写3个班级的学生,学生,和文件例程。我似乎不知道需要进入学生课堂什么才能让实例工作。我可以写以下内容: string[] students = FileRoutine.LoadStudents(STUDENT_FILE) 获取我正在尝试使用的学生数组: Students students=FileRoutines.LoadStudents(STUDENT_FILE)); 但我似乎无法让这个例子起作

我在上C课,我有一个项目。该项目为void Main编写了代码。以下是主要代码的第一部分:

我要写3个班级的学生,学生,和文件例程。我似乎不知道需要进入学生课堂什么才能让实例工作。我可以写以下内容:

string[] students = FileRoutine.LoadStudents(STUDENT_FILE)
获取我正在尝试使用的学生数组:

Students students=FileRoutines.LoadStudents(STUDENT_FILE));
但我似乎无法让这个例子起作用。这是文件的内容:

122338  Weltzer Teresa
123123  Wang    Choo
123131  Adams   James
123132  Binkley Joshua Troy
123139  Howard  Tyler
123160  King    Alma
我以前看过这个项目的帖子,但是似乎没有人能够回答这个问题,而是提供了其他的选择。 我知道在创建类的实例时,我需要一个或多个构造函数,但我没有这样做:

 Students students = new Students();
到目前为止,我不知道该怎么办

谢谢 Dave

要按要求实现,FileRoutines.LoadStudentsSTUDENT_文件必须返回一个Students实例,因此需要修改该方法来构造新的Students并返回该实例,而不是字符串[]

那么,您的学生类可能在其构造函数中使用字符串[]

这应该足够让你继续学习了?

显然,学生类型必须表现得像某种集合。我提议这样做

一个班级对于一个学生来说是小菜一碟

class Student
{
    public string Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
现在事情变得更有趣了。下面的类实现了Student的IEnumerable,以提供遍历其内部结构的最关键方法。一旦你有了这个想法,这就很容易了。您已经在某些集合中存储了学生,因此只需返回其枚举数,而不是创建自定义枚举数

class Students : IEnumerable<Student>
{
    private readonly List<Student> students;

    public Students(IEnumerable<Student> students)
    {
        this.students = students.ToList();
    }

    public IEnumerator<Student> GetEnumerator()
    {
        return students.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return students.GetEnumerator();
    }
}

考虑一个更好的标题来描述你的问题。那太好了!什么东西不管用?FileRoutine.LoadStudents方法是什么样子的?@Joe看起来他还需要实现它。@OndrejJanacek,也许吧,但是我们怎么确定呢?
class Students : IEnumerable<Student>
{
    private readonly List<Student> students;

    public Students(IEnumerable<Student> students)
    {
        this.students = students.ToList();
    }

    public IEnumerator<Student> GetEnumerator()
    {
        return students.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return students.GetEnumerator();
    }
}
class FileRoutines
{
    public static Students LoadStudents(string path)
    {
        var lines = File.ReadLines(path);
        var students = lines.Select(l => l.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries))
                            .Select(split => new Student 
                             { 
                                 Id = split[0], 
                                 LastName = split[1], 
                                 FirstName = split[2] 
                             });
        return new Students(students);
    }
}