Нужна помощь по замене переключателя в C#C#

Место общения программистов C#
Ответить
Anonymous
 Нужна помощь по замене переключателя в C#

Сообщение Anonymous »

У меня есть консольное приложение на .NET6, которое получает 1 аргумент и на его основе должно решить, какая операция будет выполнена. Сначала у меня были все выполнения как статические методы, и все решалось в операторе переключения, но затем я провел рефакторинг выполнения действий.
Но теперь я все еще пытаюсь понять, как удалить оператор переключения, чтобы все стало немного более динамичным и не приходилось беспокоиться о добавлении нового случая каждый раз, когда разрабатывается новое действие.
По сути, пытаясь найти решение (по крайней мере «хороший» подход), где разработчик должен беспокоиться только о кодировании самого класса действия, а не о переключении (программа должна знать, что к чему относится -> аргумент к действию)
На данный момент основной код выглядит следующим образом:

Код: Выделить всё

namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
//validating args
if(!args.Any())
return;

switch (args.First())
{
case "action1":
case "action2":
case "action3":
break;
default:
return;
}

switch (args.First())
{
case "action1":
RunTheAction();
break;
case "action2":
RunTheAction();
break;
case "action3":
//todo RunTheAction()
break;
//it keeps growing -> RunTheAction()
}
}

static void RunTheAction() where T : IAction
{
var action = Activator.CreateInstance();
action.Execute();
}
}
}

Все экземпляры действий, которые необходимо выполнить, используют интерфейс IAction:

Код: Выделить всё

    internal interface IAction
{
void Execute();
}

internal class Action1 : IAction
{
public void Execute()
{
//do some action1 stuff
}
}

internal class Action2 : IAction
{
public void Execute()
{
//do some action2 stuff (different than action1 :) )
}
}
Связь константных строк с действиями

Подробнее здесь: https://stackoverflow.com/questions/787 ... in-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»