Это действительно зависит от сферы охвата, которую вы пытаетесь охватить. Для простых случаев вы можете использовать переключатель (я бы предложил и enum, чтобы прояснить это):
enum InputCommands
{
PrintHelloWorld = 1,
ExecuteFixedBinary = 2,
...
}
switch((InputCommands)inputInt)
{
case InputCommands.PrintHelloWorld: ...
case InputCommands.ExecuteFixedBinary: ...
}
Но если вы пишете оболочку, вам нужно что-то более надежное, например, какой-то IExecutableCommand
интерфейс, реализованный различными классами.
interface IExecutableCommand
{
void Execute(string arg);
}
Вам потребуется реализовать некоторый синтаксический анализатор для обработки нескольких запросов вызова и / или для обработки более сложных аргументов.
Если вы хотите использовать Reflection, не забудьте подтвердить свои данные! Это можно сделать, только выполнив методы с пользовательским атрибутом.
class ExecutableMethodAttribute : Attribute { }
[ExecutableMethod]
void Foo()
{
...
}
Отфильтровать методы с помощью этого атрибута достаточно просто:
someAssembly.GetTypes()
.SelectMany(t => t.GetMethods())
.Where(mi => mi.GetCustomAttributes(typeof(ExecutableMethodAttribute), true).Any())