我有两个类,一个类包含一个列表(学生),另一个是使用它的菜单程序(程序)。

当我从学生班级返回列表时,它正在返回System.Collections.Generic.List'1[2015Assignment.StudentClass]

为什么不返回数据?

它是在学生类中构建的,如下所示:

namespace 2015Assignment
{
    class StudentClass
    {
        private string StoredStudentName;
        public List<StudentClass> GetName()
        {
            /*----------------------------------------------------------------------*
             * Hard Programming the list of students                                *
             *----------------------------------------------------------------------*/
            List<StudentClass> ListOfStudents = new List<StudentClass>();
            ListOfStudents.Add(new StudentClass("Jane"));
            ListOfStudents.Add(new StudentClass("Alex"));
            ListOfStudents.Add(new StudentClass("Mike"));
            ListOfStudents.Add(new StudentClass("James"));
            ListOfStudents.Add(new StudentClass("Julia"));
            return ListOfStudents;
        }

        public StudentClass(string StudentName)
        {
            StoredStudentName = StudentName;
        }
    }
}


并像这样在程序类中调用/写入控制台:

StudentClass studentClass = new StudentClass("");
static void Main()
    {
        Program program = new Program();
        List<StudentClass> ListOfStudents = program.studentClass.GetName().ToList();
        ListOfStudents.ForEach(i => Console.WriteLine("{0}", i.GetName()));
        Console.WriteLine("\r\nPress any key to continue...");
        Console.ReadKey();
    }

最佳答案

@Maxim Goncharuk关于在控制台中看到System.Collections.Generic.List'1[2015Assignment.StudentClass]的原因是绝对正确的。您的GetName()方法返回List<StudentClass>,您将看到其字符串表示形式。

我会将您的StudentClass重写为:

internal class Student
{
    public string Name { get; set; }

    public Student(string name)
    {
        this.Name = name;
    }

    public static List<Student> GenerateStudents()
    {
        var students= new List<Student>();
        students.Add(new Student("Jane"));
        students.Add(new Student("Alex"));
        students.Add(new Student("Mike"));
        students.Add(new Student("James"));
        students.Add(new Student("Julia"));
        return students;
    }
}


几个原因:


您不应在名称中包含类型信息。因此,StudentClass应该只是Student
GetName()方法名称对于生成数据的东西来说不是一个很好的名称。令人困惑。
在您的情况下,无需在private字段中输入名称。只需使用一个简单的public属性。如果要防止外部代码更改Name,只需将set访问器设置为privatepublic string Name { get; private set; }
无需Student实例即可生成数据。使这种方法有意义static


我还将重写您的Program类,如下所示:

class Program
{
    static void Main()
    {
        var students = Student.GenerateStudents();
        students.ForEach(i => Console.WriteLine("{0}", i.Name));

        Console.WriteLine("\r\nPress any key to continue...");
        Console.ReadKey();
    }
}


原因:


我不明白为什么您需要在Student类中保留StudentClass的实例(原始代码中的Program)。如果您只想编写一些要控制台的内容,则局部变量更合适
通常,实例化Program类不是一个好习惯。它应该只是您的应用程序的入口,应该仅由框架使用

09-12 01:42