3

我正在制作一个 SchoolApp 程序来了解 C#,并且我正在尝试实现这个主要功能:

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
        }
    }
}

学校班级:

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 来编写课程我很迷茫。输出应遵循以下几行:

学校:当地学校 James,22 岁,23 岁

有人建议使用 List<> 我遇到了同样的问题,即对此知之甚少。

编辑:谢谢大家非常快速的回答。我得到了它的工作,现在将深入阅读答案,这样我就不必再问相关问题了!

4

9 回答 9

5

Console.WriteLine(t)执行 t 到字符串的隐式转换。因此,您需要覆盖ToString()所有类或显式地从您的类中创建字符串。

例子:

class School
    {
        public string name;
        List<Student> Students = new List<Student>();

        ...
        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);
    }

}
于 2013-02-24T14:42:42.567 回答
4

在您的School班级中,您似乎想要一个私人学生名单。List 很简单,它采用泛型类型,在您的情况下Student,您可以在其中添加和删除项目。

在你的School课堂上使用:

 private List<Student> 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<Student>();

看看下面的链接。MSDN 是正确的文档,但 dotnetperls 适合这样的简单内容。

http://msdn.microsoft.com/en-gb/library/3wcytfd1.aspx

http://www.dotnetperls.com/list-add

于 2013-02-24T14:40:43.767 回答
2
class School
{
    public string name;
    private List<Student> students = new List<Student>();

    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;
    }
}
于 2013-02-24T14:44:34.090 回答
1

有人建议使用List<>我遇到了同样的问题,即对此知之甚少。

是的,该List<T>课程适合这种情况。它有一个 .Add 方法,允许您向其中添加对象。然后你可以遍历这个列表的元素(使用foreach语句),然后使用 Console.WriteLine 方法将每个元素的详细信息打印到控制台。

于 2013-02-24T14:40:52.687 回答
1

除了List<Student>which 需要是 的成员School,在您的 main 方法中添加循环(foreach)以将它们打印出来之外,您还应该查看以下内容:

以上都是因为你说你是新人,所以我觉得还不如给你指点。

于 2013-02-24T14:50:38.230 回答
0

听起来你想添加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> school = new List<School>();
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);
}
于 2013-02-24T14:40:35.330 回答
0

您可以将扩展方法“WriteStudent”写入控制台类并接受学生作为参数。在你可以使用的方法里面Console.Write("School: " +objParameter.Name)

于 2013-02-24T14:42:00.413 回答
0

您有 2 个基本选项:

  1. 为每个学生添加一个“学校”属性(变量)
  2. 为每所学校添加“学生列表”属性。

如果您更喜欢第二种方法:

您需要向学校班级添加一个新变量:

 List<Student> student_list = new List<Student>();

为了添加学生,定义:

 public void AddStudent(Student student)
 {
 student_list.Add(student);
 }

另请注意,如果您希望按特定顺序打印,则必须在学生和学校课程中添加 ToString() 方法。

希望它有帮助,祝你好运。

于 2013-02-24T14:45:18.943 回答
0

Student首先,你需要一个容器来存储类中类的实例School。然后,在您的AddStudent方法中,您只需使用 List 类本身公开的方法将学生添加到您的集合中:

class School
{
    public string name;
    private List<Student> students = new List<Student>();

    // ...

    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();
于 2013-02-24T14:47:06.947 回答