如何'解析'输入字符串和调用目标函数?

时间:2011-09-16 13:10:02

标签: .net

我正在开发一个数学/统计软件。我希望我的客户能写出类似的内容:

Function1(value)

然后,根据功能名称,调用我的内部软件功能。 这似乎是一个“解析器”吧?

目前我正在考虑用这样的代码来解决它:

    switch(my_parsed_function_string) {
       case "function1":
          result = function1(value);
       case "function2": 
          result = function2(value);
    ...
    ...
    }

有更优雅的方式吗? 包含“函数”名称的字符串可以在没有额外的开发人员工作的情况下启用吗?

提前谢谢

3 个答案:

答案 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)

您可以在单个对象中声明所有函数,然后反思它以获取方法名称吗?