从类填充List <t>

时间:2019-02-26 12:34:29

标签: c# .net oop console-application

几个星期后,我开始参加C#.net的夜校。 我正在尝试创建一个控制台应用程序,要求一个或多个人的名字,姓氏,年龄等。可以输入多个记录。

并将其放在列表中,然后将人员列表打印到控制台。

    public class Program
{
    public static List<Person> _people = new List<Person>();

    static void Main(string[] args)
    {
        do
        {
            Console.Write("Naam: ");
            string name = Console.ReadLine();

            Console.Write("Achternaam: ");
            string lastname = Console.ReadLine();

            Person person = new Person(name, lastname);
            _people.Add(person);

            Console.Write("Would you like to add another person?");


        } while (Console.ReadLine()=="J");

        PrintDetails();
        Console.ReadKey();

    }

    static void PrintDetails()
    {
        foreach (Person person in _people)
        {
            Console.Write(person._name +" ");
            Console.WriteLine(person._lastname);
        }
    }

和我的班级:

    public class Person
{
    public string _name;
    public string _lastname;

    public Person(string name, string lastname)
    {
        _name = name;
        _lastname = lastname;
    }
}

我觉得有一种更简单,更“正确”的方式来做到这一点?

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

那几乎是“它”。

您使用的是控制台,因此必须使用do..while循环作为输入,并完全使用它。

您正在使用foreach进行打印。

我看不到可以保存的一行。

只有一个小问题。那些带下划线的字段名称:通常保留给非公共变量。使用属性时,需要一个后备字段。而且,在任何类代码中(属性处理程序除外)都必须访问后备字段,这对从根本上来说很重要!在背景字段的前面加上下划线可确保属性“名称”和字段“ _Name”之间没有混淆。

实际上,许多人更喜欢仅使用自动执行器属性,因此他们不会意外访问后备字段。或尽可能地阻碍字典中的字段值。只是为了消除偶然使用这些字段的机会。

在您的情况下,这些字段是公开的,因此下划线没有任何用途。

编辑:您可以实际保存一行!

Console.Write(person._name +" ");
Console.WriteLine(person._lastname);

可以压缩为:

Console.WriteLine(person._name + " " + person._lastname);

但是我不建议这样做。一行中有两个字段或属性访问可能会使调试困难(请参阅“参考未设置为对象的实例”)。而且,JiT编译器很可能会注意到这一点,并且无论如何都要在调试版本之外对其进行优化。