Добавить методы класса в лист

Рейтинг: 0Ответов: 1Опубликовано: 15.02.2023

Выполняю задачи в институте на c#. На каждой неделе мы делаем 2-3 задачи.

using System;
using System.Threading.Tasks;
using Теория_алгоритмов;

namespace Теория_алгоритмов
{
    class Programm
    {
        static void Main()
        {
            string output;
            System.Console.OutputEncoding = System.Text.Encoding.UTF8;

            // Выбор задачи для запуска
            Console.WriteLine("Выберите задачу:");
            for (int i = 0; i < Tasks.tasksCount + 1; i++)
            {
                Console.WriteLine($"> {i}");
            }

            // Вывод задач и их выбор
            Console.Write("> ");
            output = Console.ReadLine() ?? "Empty";
            Console.Clear();
            switch (output.ToLower())
            {
                case "1":
                    Tasks.firstTask();
                    Programm.Main();
                    break;
                case "2":
                    Tasks.secondTask();
                    Programm.Main();
                    break;
                case "3":
                    Tasks.thirdTask();
                    Programm.Main();
                    break;
                case "4":
                    Tasks.fourthTask();
                    Programm.Main();
                    break;
                case "0":
                    Environment.Exit(0);
                    break;
                case "":
                    Environment.Exit(0);
                    break;
                default:
                    Console.WriteLine("Такой задачи нету!");
                    Programm.Main();
                    break;
            }
        }
    }
}

Это код, для выбора задачи.

using System;
namespace Теория_алгоритмов
{
    public class Tasks
    {
        internal static int tasksCount = 4;

        public static void firstTask()
        {
            int num, hundreds, decimalNum, firstNum;

            Console.WriteLine("Введите трехзначное число");
            Console.Write("> ");
            num = Convert.ToInt32(Console.ReadLine());
            hundreds = num / 100;
            decimalNum = (num % 100) / 10;
            firstNum = num % 10;
            num = decimalNum * 100 + hundreds * 10 + firstNum;

            Console.WriteLine($"Конвертированное число - {num}");

        }

        public static void secondTask()
        {
            int num, decimalNum, firstNum;

            Console.WriteLine("Введите двузначное число");
            Console.Write("> ");
            num = Convert.ToInt32(Console.ReadLine());

            decimalNum = num / 10;
            firstNum = num % 10;

            if(decimalNum == firstNum)
            {
                Console.WriteLine("True");
            } else
            {
                Console.WriteLine("false");
            }
        }

        public static void thirdTask()
        {
            double x = -1.2, step;

            Console.WriteLine("Введите шаг:");
            Console.Write("> ");

            step = Convert.ToDouble(Console.ReadLine());

            formulaRes(x, step);
            
        }

        public static void formulaRes(double a, double step)
        {
            Console.WriteLine("{0, 4} |{1, 4}", "x", "y");
            Console.WriteLine("-----------");
            for(int i = 0; i < 15; i++)
            {
                Console.WriteLine("{0,4} |{1,4}", Math.Round(a, 1), Math.Round(-2.3 * a + 5.6, 1));
                a += step;
            }
        }

        public static void fourthTask()
        {
            int number;
            Console.WriteLine("Введите число:");
            Console.Write("> ");
            number = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Кол-во цифр четное?");
            if (number.ToString().Length % 2 == 0) Console.WriteLine(true);
            else Console.WriteLine(false);

            Console.WriteLine("Число меньше 44?");
            if (number < 44) Console.WriteLine(true);
            else Console.WriteLine(false);
        }
    }
}


Здесь я описываю сами задачи.

Когда добавляется новая задача, ее надо добавлять в конструкцию switch. Я хочу сделать так, чтобы был перебор листа, в котором будут задачи. Принцип следующий: ввел номер - прошелся по листу - совпало - запустил.

Вопрос следующий: как добавить методы класса Tasks в лист, чтобы перебрать его или вы знаете способ проще?

Заранее спасибо!

Ответы

▲ 0Принят

Нашел способ.

Получаю все методы и добавляю их в лист


namespace Теория_алгоритмов
{
    class Programm
    {
        static void Main()
        {
            int output;
            List<string> tasks = new List<string>();
            System.Console.OutputEncoding = System.Text.Encoding.UTF8;

            // Получаю все методы задач в Tasks и добавляю их в лист tasks
            var allTasks = typeof(Tasks).GetMethods();
            foreach (MethodInfo t in allTasks)
            {
                Regex regex = new Regex(@"Task(\w*)");
                MatchCollection matches = regex.Matches(t.Name);
                if (matches.Count > 0)
                {
                    foreach (Match match in matches)
                    {
                        tasks.Add(t.Name);
                    }
                }
            }

            // Выбор задачи для запуска
            Console.WriteLine("Выберите задачу:");
            for (int i = 0; i < tasks.Count + 1; i++)
            {
                Console.WriteLine($"> {i}");
            }

            // Вывод задач
            Console.Write("> ");
            output = Convert.ToInt32(Console.ReadLine());
            Console.Clear();

            // Проверяю, есть ли задача, есть - запустил, нету - вывод ошибки
            for (int i = 0; i < tasks.Count; i++)
            {
                if (Convert.ToInt32(output) - 1 == i)
                {
                    typeof(Tasks).GetMethod(tasks[i]).Invoke(tasks[i], null);
                    Programm.Main();
                }

                if (output == 0) Environment.Exit(0);

                if(output - 1 >= tasks.Count)
                {
                    Console.WriteLine("Такой задачи нету!");
                    Programm.Main();
                }
            }
        }
    }

Через регулярные выражения нахожу задачи, в которых есть слово Task.

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