我有两个类,一个类包含一个列表(学生),另一个是使用它的菜单程序(程序)。
当我从学生班级返回列表时,它正在返回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
访问器设置为private
:public 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
类不是一个好习惯。它应该只是您的应用程序的入口,应该仅由框架使用