s2d1ent
@s2d1ent
Специалист технической поддержки

Как заполнить список объектами класса?

Всем привет. Только начал изучать C# и в тестовой программе столкнулся с небольшой проблемой. Есть список, в который надо записывать объекты класса и выводить, но что-то не совсем понятно как работают списки и как список должен взаимодействовать с классом. Ибо оно вроде и записывает, а вроде как и нет, и результата в консоли тоже нема. Помогите разобраться с тем как наполнять список и как применять методы к объектам списка.
Код программы:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Dynamic;

class Dark
{
    private int lvl;
    private string name;
    private int id=0;
    private string country;

    public void GetDark (int lvl, string name, string country) {
        this.lvl = lvl;
        this.name = name;
        this.id = id;
        this.country = country;
        id++;
    }

    public string WriteDark
    {
       get;set;
    }

}
class MainClass
{
   
    static void Main ()
    {
        Console.WriteLine("Введите пароль");
        int pass;
        int i = 0;
        pass = int.Parse(Console.ReadLine());
        bool pas = false;
        bool block = false;
        switch (pass)
        {
            case 8294:
                Console.WriteLine("Доступ разрешен");
                pas = true;
                break;
            default:
                goto repeatPass;
        }
    repeatPass:
        {
            if (pas == false)
            {
                while (block == false)
                {
                    i++;
                    Console.WriteLine("Повторите попытку");
                    pass = Convert.ToInt32(Console.ReadLine());
                    if (i == 2)
                    {
                        block = true;
                        Console.Clear();
                        Console.WriteLine("Доступ заблокирован");
                        Console.ReadKey();
                        Environment.Exit(0);
                    }
                };
            }
        }
        if (pas == true)
        {
            Console.WriteLine("Добро пожаловать в систему");
        }
        int select;

        List<Dark> DB = new List<Dark>();
        
        string selectStr = "1 - Пополнить БД" + "\n" + "2 - Посмотреть БД";
    repeatSelect:
        {
            Console.WriteLine("Что вы хотите выбрать ?");
            Console.WriteLine(selectStr);
            select = Convert.ToInt32(Console.ReadLine());
        }
        switch (select)
        {
            case 1:
                goto dbAdd;
                break; 
            case 2:
                goto dbVal;
                break; 
            default: goto repeatSelect;
        }
    
        dbAdd: {
            Console.WriteLine("Введите название записи");
            dynamic dbname;
            dbname = Console.ReadLine();
            string name = dbname;
            Console.WriteLine("Создание записи в БД");
            DB.Add(dbname = new Dark());
            Console.WriteLine("Запись создана");
            dynamic lvl;
            Console.WriteLine("Введите уровеь");
            lvl = int.Parse(Console.ReadLine());
            dynamic country;
            Console.WriteLine("Введите страну");
            country = Console.ReadLine();
            dbname.GetDark(lvl,name,country);
            Console.WriteLine("Нажмите любую клавишу чтобы продолжить");
            Console.ReadKey();
            Console.Clear();
            goto repeatSelect;
        }
        dbVal: {
            for (var k = 0;k<DB.Count;k++)
            {
                Console.WriteLine(DB[k].WriteDark);
            }
            Console.WriteLine(DB.Count);
                Console.ReadKey();
                Console.Clear();
            goto repeatSelect;
        }
       

        Console.ReadKey();
    }
}
  • Вопрос задан
  • 2163 просмотра
Решения вопроса 1
Отличный способ попросить порефакторить код.
Вот я переписал эту дичь. Это всё ещё процедурщина, но хотябы читабельная и без goto и бессмысленных dynamic
using System;
using System.Collections.Generic;
using System.Linq;

namespace App
{
    class Application
    {
        private static List<Record> DB = new();

        static void Main()
        {
            var authorized = Authorize();
            if (authorized)
            {
                Greet();
                WorkLoop();
            }
            else
            {
                RestrictAccess();
            }

            BeforeLeave();
        }

        private static void BeforeLeave()
        {
            Console.WriteLine("Нажмите любую кнопку, чтобы выйти");
            Console.ReadKey();
        }

        private static void Greet()
        {
            Console.WriteLine("Доступ разрешён");
            Console.WriteLine("Добро пожаловать в систему");
        }

        private static void RestrictAccess()
        {
            Console.WriteLine("Доступ заблокирован");
        }

        private static bool Authorize()
        {
            Console.WriteLine("Введите пароль");
            const string password = "8294";
            const int maxAttemptsCount = 3;

            var passwordCorrect = false;
            for (var i = 0; i < maxAttemptsCount; i++)
            {
                var input = Console.ReadLine();
                if (input == password)
                {
                    passwordCorrect = true;
                    break;
                }
            }

            return passwordCorrect;
        }

        private static void WorkLoop()
        {
            while (true)
            {
                Console.Clear();
                Console.WriteLine(@"
1 - Пополнить БД
2 - Посмотреть БД");
                var guess = Console.ReadLine();
                switch (guess)
                {
                    case "1":
                        AddNewRecord();
                        break;
                    case "2":
                        ReadAllRecords();
                        break;
                    default:
                        continue;
                }

                Console.WriteLine("Нажмите любую кнопку, чтобы венуться в меню");
                Console.ReadKey();
            }
        }

        private static void ReadAllRecords()
        {
            Console.WriteLine();
            Console.WriteLine("ID\t Имя\t Уровень\t Страна");
            foreach (var record in DB)
            {
                Console.WriteLine($"{record.Id}\t{record.Name}\t{record.Level}\t{record.Country}");
            }

            Console.WriteLine(DB.Count);
        }

        private static IEnumerator<int> sequence = Enumerable.Range(1, int.MaxValue).GetEnumerator();

        private static void AddNewRecord()
        {
            Console.WriteLine("Создание записи");
            Console.Write("Введите имя: ");
            var name = Console.ReadLine();
            Console.Write("Введите уровень: ");
            var levelString = Console.ReadLine();
            if (!int.TryParse(levelString, out var level))
            {
                Console.WriteLine("Ошибка. Введено не число. Создание записи прервано.");
                return;
            }

            Console.Write("Введите страну: ");
            var country = Console.ReadLine();
            sequence.MoveNext();
            var id = sequence.Current;
            var record = new Record
            {
                Id = id,
                Country = country,
                Name = name,
                Level = level
            };
            DB.Add(record);
            Console.WriteLine("Запись создана");
        }
    }

    public class Record
    {
        public int Id { get; init; }
        public string Name { get; init; }
        public int Level { get; init; }
        public string Country { get; init; }
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы