i like food Ответов: 1

Как я могу распечатать содержимое списка записей без печати позиции списка?


Я пытался распечатать содержимое списка записей в консоли в Visual Studio 2017, но не могу заставить его распечатать содержимое списка, а только позицию списка в моем коде (как я понимаю).

Вот этот код:

using System;
using System.Collections.Generic;



namespace list_of_records
{
    class Program
    {
        static void Main(string[] args)
        {
            List<StudentData> students = new List<StudentData>();

            StudentData student = new StudentData();
            
            for (int i = 0; i <= 1; i++ )
            {
                Console.WriteLine("first name: ");
                student.firstName = Console.ReadLine();
                Console.WriteLine("last name: ");
                student.lastName = Console.ReadLine();
                Console.WriteLine("age: ");
                student.age = Convert.ToInt32(Console.ReadLine());


                students.Add(student);
            }


            //students.ForEach(Console.WriteLine);
            /*
            foreach (var st in students)
            {
                Console.WriteLine(st);
            }
            */
            for (int i = 0; i < students.Count; i++)
            {
                Console.WriteLine(students[i]);
            }

        }



        public class StudentData
        {
            public string firstName;
            public string lastName;
            public int age;
        }

    }
}


это печать:
list_of_records.Program+StudentData
list_of_records.Program+StudentData


Это, как я понимаю, позиция списка в моем проекте.

почему он это делает и как я могу заставить его выполнять мои приказы?

Спасибо.

Что я уже пробовал:

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

1 Ответов

Рейтинг:
5

OriginalGriff

Это потому, что ваш StudentData класс не реализует ToString - Итак, версия по умолчанию для object вместо этого используется, и это печатает полное имя класса (потому что он не "знает" о добавленном содержимом и о том, что вы хотите напечатать).
Попробовать это:

public class StudentData
    {
    public string firstName;
    public string lastName;
    public int age;
    public override string ToString()
        {
        return $"{firstName} {lastName} is {age} years old";
        }
    }
Или еще лучше, это:
public class StudentData
    {
    public string firstName { get; set; }
    public string lastName { get; set; }
    public int age { get; set; }
    public override string ToString()
        {
        return $"{firstName} {lastName} is {age} years old";
        }
    }
Потому что вы не должны предоставлять поля напрямую - вместо этого используйте свойства.