我有两个类,一个是包含一个列表(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();
}
答案 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
访问者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
课程不是一个好习惯。它应该只是您应用程序的入口,应该仅由框架使用
答案 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;
}
}
}