WriteLine与一个类
我正在制作一个学习C#的SchoolApp程序,我有这个主要function,我正在努力工作:
namespace SchoolApp { class Program { public static void Main(string[] args) { School sch = new School("Local School"); sch.AddStudent(new Student { Name = "James", Age = 22 }); // this function sch.AddStudent(new Student { Name = "Jane", Age = 23 }); Console.WriteLine(sch); // this implementation } } }
学校class级:
namespace SchoolApp { class School { public string name; public School() { } public School(string the_name) { name = the_name; } public void AddStudent(Student student) { } } }
学生类:命名空间SchoolApp
{ class Student { public int Age; public string Name; public Student() { Age = 0; Name = "NONAME"; } public string _name { get { return this.Name; } set { Name = value; } } public int _age { get { return this.Age; } set { Age = value; } } } }
我是C#的新手,我很遗憾我应该如何制作AddStudent以及如何使用WriteLine来编写类。 输出应该沿着这些方向:
学校:当地学校詹姆斯,22简,23岁
有人建议使用List 我遇到了不太了解它的同样问题。
编辑:谢谢大家的快速答案。 我得到了它的工作,现在将深入阅读答案,所以我不必再问相关的问题!
在您的School
课程中,您似乎想拥有一份私人学生名单。 列表很简单,它采用通用类型,在您的情况下Student
,您可以添加和删除项目。
在你的School
课堂上使用:
private List students;
在您的AddStudent代码中,您可以简单地使用:
students.Add(student); // student is the variable being passed in and students is the list. NOTE: You will have to make sure students is intalized to a new List of Student. students = new List();
看看以下链接。 MSDN是正确的文档,但是dotnetperls对于这样简单的东西很有用。
有人建议使用
List<>
我遇到了不太了解它的同样问题。
是的, List
类适用于这种情况。 它有一个.Add方法,允许您向其添加对象。 然后,您可以遍历此列表的元素(使用foreach
语句),然后使用Console.WriteLine方法将每个元素详细信息打印到控制台。
class School { public string name; private List students = new List (); public School() { } public School(string the_name) { name = the_name; } public void AddStudent(Student student) { students.Add(student); } public override string ToString() { var sb = new StringBuilder(); sb.AppendLine(name); foreach (var student in students) { sb.AppendLine(student.ToString()); } return sb.ToString(); } } class Student { ... public override string ToString() { return "Student : " + Name + ", " + Age; } }
Console.WriteLine(t)
执行t到string的隐式转换。 因此,您需要为所有类重写ToString()
,或者明确地从类中创建字符串。
例:
class School { public string name; List Students = new List (); ... public override string ToString() { var stringValue = name; foreach(var student in Students) { stringValue += student.ToString(); } return stringValue; } } class Student { public int Age; public string Name; ... public override string ToString() { return string.Format("{0} {1}", Name, Age); } }
您可以将一个扩展方法“WriteStudent”写入Console类,并接受student作为参数。 在方法内部,您可以使用Console.Write("School: " +objParameter.Name)
你有2个基本选择:
- 为每个学生添加“学校”属性(变量)
- 为每所学校添加“学生列表”属性。
如果您更喜欢第二种方法:
你需要在学校课堂上添加一个新变量:
List student_list = new List ();
并且为了添加学生,定义:
public void AddStudent(Student student) { student_list.Add(student); }
另请注意,如果您希望打印按特定顺序排列,则必须在学生和学校课程中添加ToString()方法。
希望它有所帮助,祝你好运。
首先,您需要一个容器来存储School
类中Student
类的实例。 然后,在AddStudent
方法中,您只需使用List类本身公开的方法将学生添加到您的集合中:
class School { public string name; private List students = new List (); // ... public void AddStudent(Student student) { students.Add(student); } }
这是对List
类的引用。
至于输出,你可以在School
类本身编写一个函数来输出学生:
public void Print() { Console.WriteLine(name); foreach (Student s in students) Console.WriteLine(s.Name + ", " + s.Age); }
并在您的Main
使用它,就像:
sch.Print();
除了List
需要成为School
的成员之外,在main方法中添加了一个循环( foreach
)来打印它们,您还应该看看以下内容:
- 你的课程应该公开吗? 主程序可能不在同一名称空间中。
-
您是否考虑过使用getter和setter的自动属性? http://msdn.microsoft.com/en-us/library/bb384054.aspx
public int Age { get; set; } public String Name { get; set; }
-
您的命名约定, http://msdn.microsoft.com/en-us/library/vstudio/618ayhy6(v = vs.100).aspx
所有上述因为你说你是新人,所以我想不妨给你一些指示。
听起来你想添加一个School
与相应的Students
public class Student { public string StudentName { get; set; } public int Age { get; set; } } public class School : Student { public string SchoolName { get; set; } }
List school = new List (); school.Add(new School() { SchoolName = "USA", StudentName = "har", Age = 25 }); school.Add(new School() { SchoolName = "USM", StudentName = "japz", Age = 25 }); foreach (var item in school) { Console.WriteLine("School Name: {0} Name: {1} Age: {2} ", item.SchoolName, item.StudentName, item.Age); }