C# Как создать экземпляр класса в цикле

909
15 февраля 2017, 20:58

Скажем есть такой код:

using System;
    class PERSONAGE
    {
        private int age;
        private string name;
        private string race;
        private string gender;
        public PERSONAGE(string n)
        {
            name = n;
            Console.Write("Enter age of {0} ", name);
            age = Convert.ToInt32(Console.ReadLine());
            Console.Write("Enter race of {0} ", name);
            race = Console.ReadLine();
            Console.WriteLine("Enter gander of {0} ", name);
            gender = Console.ReadLine();
            Console.WriteLine("Was created new personage.");
            Console.WriteLine("Name is {0}, age is {1}, race is {2} and gander is {3}", name, age, race, gender);
        }
        public int Get_Age() { return age; }
    }
    class Program
    {
        static void main()
        {
            bool work = true;
            while (true) { 
                //Какой-то код
     }}}     

Как сделать так, что бы внутри цикла у пользователя поочередно запрашивались данные, имя возраст и т.д. и создавался новый экземпляр класса.
Либо вызывалась функция, которая это сделает.
Как реализовать это, ведь заранее мы не знаем, сколько будет таких экземпляров и их надо как-то именовать. Как реализовать такую "фабрику" экземпляров?
Надеюсь, что мне удалось объяснить то, что хочу.

Answer 1
List<PERSONAGE> Lst = new List<PERSONAGE>();
for (int i=0;i<I_DO_NOT_KNOW_HOW_MANY;i++) { 
  PERSONAGE P = new PERSONAGE("Person "+i); 
  // зделать что-то ищо з персонажем
  Lst.Add(P); 
} 

На выходе получите список Lst содержащий всех ихъ созданных с именами "Person 1" ... "Person N" :-)

Олзо, в конструкторе консольный ввод данных делать я бы не рекомендовал... Лучше переделать конструктор чтобы он принимал уже все готовые параметры, а эти параметры предварительно собрать (можно в том же цикле или как угодно) вводом данных (с консоли, с формы, из файла загрузить, откуда угодно) с валидацией полноты и корректности, как положено. Ведь если у вас пользователь захочет прервать ввод данных - объект PERSONAGE будет создан, но не полноценно, без части свойств.

Answer 2

Создаете список персонажей, пока пользователь хочет создавать новых - создаёте и добавляете в список.

    static void main()
    {
        bool work = true;
        List<PERSONAGE> personages = new List<PERSONAGE>();
        while (work)
        {
            Console.WriteLine("Добавить ещё одного персонажа (Y - Да, N - нет)?");
            var choice = Console.ReadKey();
            switch (choice.KeyChar.ToString().ToUpper())
            {
                case ("Y"):
                    {
                        Console.Write("Введите имя персонажа: ");
                        try
                        {
                            var personage=new PERSONAGE(Console.ReadLine());
                            personages.Add(personage);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine($"Ошибка создания персонажа: {ex.Message}");
                            //Добавьте обработку ошибки
                        }
                        break;
                    }
                case ("N"):
                    {
                        work = false;
                        break;
                    }
                default:
                    {
                        Console.WriteLine("Ошибка! Введите Y или N!");
                        break;
                    }
            }
        }
    }

Ну и потом что-нибудь делаем с получившимся списком персонажей.

READ ALSO
База данных в Access, уже открыта или нет?

База данных в Access, уже открыта или нет?

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

311
Работа с датой в C#

Работа с датой в C#

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

405
Расширение связывающей таблицы Entity Framework

Расширение связывающей таблицы Entity Framework

Имеется 3 сущности: студент и преподаватель, унаследованные от простого класса User, и предметМне необходимо будет получать информацию об оценках...

340
Подключение Delphi dll к C# проекту

Подключение Delphi dll к C# проекту

Есть библиотека CheckUfadll В справке разработчика написано, что подключать, нужные мне функции, к Delphi проекту вот так:

598