Добавить методы класса в лист
Выполняю задачи в институте на 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 в лист, чтобы перебрать его или вы знаете способ проще?
Заранее спасибо!Ответы (1 шт):
Автор решения: Soret
→ Ссылка
Нашел способ.
Получаю все методы и добавляю их в лист
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.
Пользователь вводит номер задачи, далее перебираю методы, индекс совпал - запустил.