Вы можете использовать словарь, который использует string
как ключи и методы (как Action, Func, так и пользовательский делегат) в качестве значения, тогда вам просто нужно использовать вход пользователя и использовать его чтобы получить соответствующее действие. Если в команде могут быть такие параметры, как этот command param1
, используйте string.Split
, чтобы отделить команду от параметра, затем используйте командную строку как ключ, а при выполнении метода передайте другую строку в качестве параметра (в зависимости от типа данных параметра чтобы, возможно, придется разобрать параметр команды из строки к чему-то еще)
код будет выглядеть следующим образом:
Использование Func:
Примечание: Func
требует, по меньшей мере, один параметр и возвращаемое значение.
void Main()
{
public Dictionary<string, Func<string, int>> commands =
new Dictionary<string, Func<string, int>>();
commands.Add("getdate", GetDate);
Console.WriteLine("Enter a command");
string input = Console.ReadLine(); //<-- Try typing "getdate"
commands[input].Invoke();
}
public int GetDate(string someParameter)
{
Console.WriteLine(DateTime.Today);
return 0;
}
Использование Действие:
Примечание: Action
требует, по меньшей мере, один параметр.
void Main()
{
public Dictionary<string, Action<string>> commands = new Dictionary<string, Action>();
commands.Add("getdate", GetDate);
Console.WriteLine("Enter a command");
string input = Console.ReadLine(); //<-- Try typing "getdate"
commands[input].Invoke();
}
public void GetDate(string someParameter)
{
Console.WriteLine(DateTime.Today);
}
Использование пользовательского делегата:
public delegate double YourDelegate(string param);
void Main()
{
public Dictionary<string, YourDelegate> commands =
new Dictionary<string, YourDelegate>();
commands.Add("getdate", GetDate);
Console.WriteLine("Enter a command");
string input = Console.ReadLine(); //<-- Try typing "getdate"
commands[input].Invoke();
}
public double GetDate(string someParameter)
{
Console.WriteLine(DateTime.Today);
return 0.0;
}
Это не обязательно будет менее многословным, но вы можете посмотреть на использовании 'switch' заявление. Возможно, вы сможете использовать что-то вроде словаря ', но я не уверен, как вы могли бы подключить это к логике логического кода элегантным способом, если только значения не были' Func' какого-либо типа. –
Tim