Function1(value)
然后,根据功能名称,调用我的内部软件功能。 这似乎是一个“解析器”吧?
目前我正在考虑用这样的代码来解决它:
switch(my_parsed_function_string) {
case "function1":
result = function1(value);
case "function2":
result = function2(value);
...
...
}
有更优雅的方式吗? 包含“函数”名称的字符串可以在没有额外的开发人员工作的情况下启用吗?
提前谢谢
答案 0 :(得分:2)
是的,有。它被称为IDictionary
。更具体地说,在您的情况下,它更像IDictionary<string, Func<double>>
。因此,您的代码变为
var functions = new Dictionary<string, Func<double>>();
var act = functions[my_parsed_function_string].Invoke(arg);
答案 1 :(得分:1)
您可以使用Command Pattern。例如:
interface ICommand
{
void Execute();
}
class Function1Command : ICommand
{
public void Execute()
{
// ...
}
}
class Function2Command : ICommand
{
public void Execute()
{
// ...
}
}
// Bind commands
IDictionary<string, ICommand> commands = new Dictionary<string, ICommand>();
commands["Function1"] = new Function1Command(); // function 1
commands["Function2"] = new Function2Command(); // function 2
// ...
然后你可以这样调用你的函数:
ICommand command = commands[parsedFunctionName] as ICommand;
if(command != null)
{
command.Execute();
}
答案 2 :(得分:-2)
您可以在单个对象中声明所有函数,然后反思它以获取方法名称吗?