Предоставить консольный ввод для списка объектов в C# - PullRequest
0 голосов
/ 05 августа 2020

Я хочу, чтобы программа записывала информацию о людях в файл в C# ... поэтому у меня есть следующий класс

class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }

    }

И класс, который записывает в файл, - это:

       class Adding
     {
        public static void AddedPersons(List<Person> persons,string path)
        {
            List<string> content = new List<string>();
            
            content.Add("FirstName , LastName");

            foreach (var person in persons)
            {
                content.Add($"{person.FirstName}, {person.LastName}");
            }

            System.IO.File.WriteAllLines(path,content);
        }
    }

И основной метод ...

static void Main(string[] args)
        {
           
            List<Person> persons = new List<Person>();

           
            string path = @"C:\Users\cosmi\Desktop\Citire\Test.csv";
            
            Elements(persons);
            Adding.AddedPersons(persons, path);
            
            Console.ReadLine();

        }

И элементы, которые я добавляю в список, жестко закодированы следующим методом ...

 public static void Elements(List<Person> persons)
        {

            persons.Add(new Person() { FirstName = "Cosmin", LastName = "Ionut" });
            persons.Add(new Person() { FirstName = "Bianca", LastName = "Elena" });
    
        }

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

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Если вы хотите меньшее изменение, я бы сделал следующее:

public static List<Person> GetElements()
{
    List<Person> persons = new List<Person>();
    do
    {
        var person = new Person();

        Console.Write("Enter first name: ");
        person.FirstName = Console.ReadLine();
        Console.Write("Enter last name: ");
        person.LastName = Console.ReadLine();
        persons.Add(person);

        Console.Write("Press Y to enter another person, other key to finish.");
    } while (Console.ReadKey().Key == ConsoleKey.Y);

    return persons;
}

Код довольно прост. Я бы не создавал список в Main, но вместо этого позволил бы этому методу создавать и заполнять список, поэтому все действия, связанные с созданием списка, находятся в одном месте. Кроме того, методы обычно представляют собой глаголы, четко указывающие, что они делают. С void Elements(List<Person>) вы вообще не можете догадаться, что он делает.

0 голосов
/ 05 августа 2020

Одна из идей - написать метод, который получает имя и фамилию из ввода консоли и возвращает новый объект Person. Ниже я добавил его как метод static в класс Person.

Я также добавил метод экземпляра под названием AsCsvItem, который возвращает человека в формате CSV ("FirstName, LastName"), который будет пригодится позже.

И, наконец, я добавил метод static SaveToFile, который сохранит список людей по указанному пути к файлу в формате CSV.

Обратите внимание, что эти новые методы могут существовать где-то еще, я просто поместил их в класс Person для удобства:

class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public static Person FromConsoleInput()
    {
        var person = new Person();

        Console.Write("Enter first name: ");
        person.FirstName = Console.ReadLine();

        Console.Write("Enter last name: ");
        person.LastName = Console.ReadLine();

        return person;
    }

    public string AsCsvItem()
    {
        return $"{FirstName} , {LastName}";
    }

    public static void SaveToFile(List<Person> people, string path)
    {
        // Create a list with the column headers
        List<string> content = new List<string> {"FirstName , LastName"};

        // Add a line for each person
        content.AddRange(people.Select(person => person.AsCsvItem()));

        // Save it to the file path
        File.WriteAllLines(path, content);
    }
}

Затем вы можете просто вызвать метод FromConsoleInput в al oop, чтобы заполнить список людей, и метод SaveToFile, чтобы сохранить их в файл csv. Ниже я использую numPeople, чтобы определить, сколько людей мы должны добавить:

var numPeople = 2;
var people = new List<Person>();

for (var i = 0; i < numPeople; i++)
{
    Console.WriteLine($"Enter person #{i + 1} info:");
    people.Add(Person.FromConsoleInput());
}

Person.SaveToFile(people, @"c:\temp\people.csv");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...