使用参数调用方法

时间:2017-08-31 17:37:04

标签: c# invoke

我正在用自己的函数编写一个非常简单的脚本编写工具。

我可以使用和不使用参数来调用方法。我的主要问题是解析用户输入的参数。 我是否需要自己核心解析器或者有更好的方法吗?

示例代码

 public class FunctionList
    {
        public void MyMethod(string x)
        {
            MessageBox.Show(x);
        }
    }

    public void Test()
    {            
        Type type = typeof(FunctionList);
        MethodInfo method = type.GetMethod(debugBox.Text);
        FunctionList c = new FunctionList();
        method.Invoke(c, new object[] { "lorem ipsum" });
    }

TextBox中的用户输入示例:

MyMethod(Hello World)
Sleep(500)
MyMethod(Waited 500 ms)
Sum(5, 4)

我还想添加条件和循环,但我认为除了调用方法之外还需要其他东西。

我想出的解析器示例:

        public void Test()
    {            
        Type type = typeof(FunctionList);
        MethodInfo method = type.GetMethod(helper.GetUntilOrEmpty(debugBox.Text, "(")); //gets all text until first ( which translates to the function name
        FunctionList c = new FunctionList();
        //Handles one argument, gets the text between ( )
        int pFrom = debugBox.Text.IndexOf("(") + "(".Length;
        int pTo = debugBox.Text.LastIndexOf(")");
        string result = debugBox.Text.Substring(pFrom, pTo - pFrom);               
        //pass params        
        method.Invoke(c, new object[] { result });
    }

1 个答案:

答案 0 :(得分:0)

我在处理这些场景方面有很多经验。我开发了自己的脚本引擎(早在Adobe Flash黄金时代)。

如果你有一个复杂的机制来创建函数和对象,我建议你编写一个解析器,将你的自定义脚本代码转换为C#的编译时无错误代码。

我已经测试了你的代码,如果你已经知道要通过哪个参数,它就能正常工作。

   public void Test()
    {
        Type type = typeof(FunctionList);
        MethodInfo method = type.GetMethod("MyMethod");
        FunctionList c = new FunctionList();
        // if you dont know the type of parameter passed then you have to write a parser to determine the type of the parameter right before executing the method. 

        method.Invoke(c, new object[] { "lorem ipsum" , 10});
    }

}

public class FunctionList
{
    public void MyMethod(string x, int y)
    {
        MessageBox.Show(x + " : " + y);
    }
}