console.writeline не отображает элементы списка - PullRequest
0 голосов
/ 09 апреля 2020

Я абсолютный новичок в c#, я застрял в своем первом консольном приложении на чем-то очень простом c, но я не могу пройти мимо.

Я хочу иметь возможность принимать пользовательский ввод, записывать его в список и отображать элементы в списке обратно ко мне.

Вот как я создал свой список, насколько я понимаю, он инициализирован без каких-либо значений.

class PersonRegistry
    {
        // Create a registry of Persons
        public static List<Person> Registry = new List<Person>();
    }

Я создал свой класс person:

class Person
    {
        private Guid Guid {get; set;}
        private string FirstName {get; set;}
        private string LastName {get; set;}
        private double SalaryPerHour {get; set;}
        private double SalaryPerDay {get; set;}
        private double RechargePerHour {get; set;}
        private double RechargePerDay {get; set;}

       public Person(string firstName, string lastName, double salaryPerHour, double salaryPerDay, double rechargePerHour, double rechargePerDay)
        {
            this.Guid = new Guid();  // set Guid when object is created
            this.FirstName = firstName;
            this.LastName = lastName;
            this.SalaryPerHour = salaryPerHour;
            this.SalaryPerDay = salaryPerDay;
            this.RechargePerHour = rechargePerHour;
            this.RechargePerDay = rechargePerDay;
        }
    }

Я принимаю пользовательский ввод:

class Program
    {
        static void Main() 
        {  
            Console.WriteLine("Please enter your first name");
            string firstName = Console.ReadLine();

            Console.WriteLine("Please enter your last name");
            string lastName = Console.ReadLine();

            Console.WriteLine("Please enter your salary per hour");
            double salaryPerHour = Convert.ToDouble(Console.ReadLine());

            Console.WriteLine("Please enter your salary per day");
            double salaryPerDay = Convert.ToDouble(Console.ReadLine());

            Console.WriteLine("Please enter your recharge per hour");
            double rechargePerHour = Convert.ToDouble(Console.ReadLine());

            Console.WriteLine("Please enter your recharge per day");
            double rechargePerDay = Convert.ToDouble(Console.ReadLine());

И вот где я пишу в список:

            PersonRegistry.Registry.Add(new Person(firstName, lastName, salaryPerHour, salaryPerDay, rechargePerHour, rechargePerDay));

Сначала я попытался сделать это, чтобы затем программа напечатала элементы в списке, но это не сработало:

            //PersonRegistry.Registry.ForEach(Console.WriteLine); - doesn't work as expected, us for loop?

А потом я попытался использовать для l oop, который также не работает:

        for (int i = 0; i < PersonRegistry.Registry.Count; i++)
        {
        Console.WriteLine(PersonRegistry.Registry[i]);
        }
    }
}



Ответы [ 2 ]

3 голосов
/ 09 апреля 2020

Прежде всего измените свойства вашего класса Person на publi c, чтобы вы могли получить к ним доступ.

class Person
{
    public Guid Guid {get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}
    public double SalaryPerHour {get; set;}
    public double SalaryPerDay {get; set;}
    public double RechargePerHour {get; set;}
    public double RechargePerDay {get; set;}

    public Person(string firstName, string lastName, double salaryPerHour, double salaryPerDay, double rechargePerHour, double rechargePerDay)
    {
        this.Guid = new Guid();  // set Guid when object is created
        this.FirstName = firstName;
        this.LastName = lastName;
        this.SalaryPerHour = salaryPerHour;
        this.SalaryPerDay = salaryPerDay;
        this.RechargePerHour = rechargePerHour;
        this.RechargePerDay = rechargePerDay;
    }
}

Во-вторых, вы пытаетесь напечатать объект, а не свойства.

  Console.WriteLine(PersonRegistry.Registry[i]); // this is a Person object you are trying to print.

 foreach(var person in PersonRegistry.Registry) {
  Console.WriteLine($ "FirstName: {person.FirstName}");
  Console.WriteLine($ "LastName: {person.LastName}");
  Console.WriteLine($ "SalaryPerHour: {person.SalaryPerHour}");
  Console.WriteLine($ "SalaryPerDay: {person.SalaryPerDay}");
  Console.WriteLine($ "RechargePerDay: {person.RechargePerDay}");
 }

 Console.ReadLine();

Или, если вы хотите более динамичный c способ, чем вы можете использовать, как показано ниже:

 foreach(var person in PersonRegistry.Registry) {
  Type t = person.GetType(); // Where person is object whose properties you need.
  PropertyInfo[] pi = t.GetProperties();
  foreach(PropertyInfo p in pi) {
   System.Console.WriteLine(p.Name + " : " + p.GetValue(person));
  }
 }

Console.ReadLine();
0 голосов
/ 09 апреля 2020

Вам нужно переопределить метод ToString в классе Person

class PersonRegistry
{
    public static List<Person> Registry = new List<Person>();

    static void AddPersonToRegistry()
    {
        Person person = new Person();
        Console.WriteLine("Please enter your first name");
        person.FirstName = Console.ReadLine();

        Console.WriteLine("Please enter your last name");
        person.LastName = Console.ReadLine();

        Console.WriteLine("Please enter your salary per hour");
       person.SalaryPerHour = Convert.ToDouble(Console.ReadLine());

        Console.WriteLine("Please enter your salary per day");
        person. SalaryPerDay = Convert.ToDouble(Console.ReadLine());

        Console.WriteLine("Please enter your recharge per hour");
        person.RechargePerHour = Convert.ToDouble(Console.ReadLine());

        Console.WriteLine("Please enter your recharge per day");
        person.RechargePerDay = Convert.ToDouble(Console.ReadLine());

        Registry.Add(person);
    }

    static void PrintRegistry()
    {
        Registry.ForEach(element =>
        {
            Console.WriteLine(element.ToString());
        });
    }
}

class Person
{

    public string Id { get; set; } = Guid.NewGuid().ToString();
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public double SalaryPerHour { get; set; }
    public double SalaryPerDay { get; set; }
    public double RechargePerHour { get; set; }
    public double RechargePerDay { get; set; }

    public Person()
    {

    }
    public Person(string firstName, string lastName, double salaryPerHour, double salaryPerDay, double rechargePerHour, double rechargePerDay)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
        this.SalaryPerHour = salaryPerHour;
        this.SalaryPerDay = salaryPerDay;
        this.RechargePerHour = rechargePerHour;
        this.RechargePerDay = rechargePerDay;
    }

    public override string ToString()
    {
        return $"{nameof(Id)}: {Id}{Environment.NewLine}" +
            $"{nameof(FirstName)}: {FirstName}{Environment.NewLine}" +
            $"{nameof(LastName)}: {LastName}{Environment.NewLine}" +
            $"{nameof(SalaryPerHour)}: {SalaryPerHour}{Environment.NewLine}" +
            $"{nameof(SalaryPerDay)}: {SalaryPerDay}{Environment.NewLine}" +
            $"{nameof(RechargePerHour)}: {RechargePerHour}{Environment.NewLine}" +
            $"{nameof(RechargePerDay)}: {RechargePerDay}";
    }

}

Ссылки

Поля
Свойства
переопределить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...