【问题标题】:WriteLine with a class带类的 WriteLine
【发布时间】:2013-02-09 18:11:29
【问题描述】:

我正在制作一个 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 来编写课程我很迷茫。输出应该是这样的:

学校:当地学校 詹姆斯,22 岁 简,23 岁

有人建议使用 List 我也遇到了同样的问题,对它的了解不够。

编辑:感谢大家非常快速的回答。我得到了它的工作,现在将开始深入阅读答案,因此我不必再次提出相关问题!

【问题讨论】:

    标签: c# .net list class


    【解决方案1】:

    听起来您想添加一个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);
    }
    

    【讨论】:

      【解决方案2】:

      在您的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

      【讨论】:

        【解决方案3】:

        有人建议使用List&lt;&gt; 我遇到了同样的问题,就是对此了解不够。

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案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);
                }
            
            }
            

            【讨论】:

            • 我将如何去体验它?我试过了,但我被错误击倒了。
            • 错误 1 ​​'SchoolApp.School.ToString()': 不是所有的代码路径都返回一个值 这里: public override string ToString()
            【解决方案6】:
            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;
                }
            }
            

            【讨论】:

            • 这非常有效。现在来深入研究一下。非常感谢。
            【解决方案7】:

            您有 2 个基本选项:

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

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

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

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

            为了添加学生,定义:

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

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

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

            【讨论】:

              【解决方案8】:

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

              class School
              {
                  public string name;
                  private List<Student> students = new List<Student>();
              
                  // ...
              
                  public void AddStudent(Student student)
                  { 
                      students.Add(student);
                  }
              }
              

              Here 是对List 类的引用。

              至于输出,你可以在School类本身写一个函数来输出学生:

              public void Print()
              {
                  Console.WriteLine(name);
                  foreach (Student s in students)
                      Console.WriteLine(s.Name + ", " + s.Age);
              }
              

              并在您的Main 中使用它,就像:

              sch.Print();
              

              【讨论】:

                【解决方案9】:

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

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-05-09
                  • 2016-01-11
                  • 2021-06-18
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多