返回的列表不返回数据

时间:2015-12-07 14:47:32

标签: c# list

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

当我从Student Class返回列表时,它返回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();
    }

4 个答案:

答案 0 :(得分:4)

@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课程不是一个好习惯。它应该只是您应用程序的入口,应该仅由框架使用

答案 1 :(得分:2)

您调用返回i.GetName()List<StudentClass>致电Console.WriteLine的方法ToString(),因此您拥有System.Collections.Generic.List'1[2015Assignment.StudentClass]

答案 2 :(得分:0)

试试这个:

using System;
using System.Collections.Generic;
using System.Linq;

public class StudentClass
{
    private string _storedStudentName;
    public static List<StudentClass> GetStudents()
    {
        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 string Name
    {
        get
        {
            return _storedStudentName;
        }
    }

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

程序:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        List<StudentClass> ListOfStudents = StudentClass.GetStudents();
        ListOfStudents.ForEach(i => Console.WriteLine("{0}", i.Name));
        Console.WriteLine("\r\nPress any key to continue...");
        Console.ReadKey();
    }
}

答案 3 :(得分:0)

在代码中重构了一些内容。你的代码实际上没有多大意义(或者可能只是我)

//namespace can not start with a number
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //You need to define the list in your host program, not inside the class itself    
            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"));


            ListOfStudents.ForEach(i => Console.WriteLine("{0}", i.GetName()));
            Console.WriteLine("\r\nPress any key to continue...");
            Console.ReadKey();

        }
    }

    //changed the class to public so you can access it.
    public class StudentClass
    {
        private string _storedStudentName;

        public string GetName()
        {
            return _storedStudentName;
        }

        public StudentClass(string studentName)
        {
            _storedStudentName = studentName;
        }
    }
}