如何使用文本中的参数调用方法

时间:2015-04-03 15:26:43

标签: c# .net reflection lexer templating

我正在尝试用c#开发一个模板引擎,在我的概念中,我需要读取文本文件中的方法和参数。This显示可以完成的任务,但是如果该参数也是从文本中读取的。有没有办法实现这个目标?

        private static void Main(string[] args)
        {
            string returnValue = Execute("AMethod(\"Hello\")");
            //the result in retunValue is same as from code commented below:
            // string returnValue= AMethod("Hello");
        }

        public static string AMethod(string parameter)
        {
            return "xyz" + parameter;
        }

这里的问题是如何编写执行方法

2 个答案:

答案 0 :(得分:1)

您提供的链接有您正在寻找的答案。看一下

object[] parametersArray = new object[] { "Hello" }; 并将其更改为

object[] parametersArray = new object[] { parameter };

答案 1 :(得分:0)

有三种方法可以完成你想要完成的任务:

  1. 反思(这是您参考的文章中解释的内容)
  2. Reflection.Emit的
  3. 动态编辑
  4. 2& 3更复杂,更重,但根据您在模板引擎中尝试实现的语法,其中一个可能是最好的方法。反射要求您处理调用的每个方面 - 绑定到正确的方法,将参数作为数组传递等。动态编译将允许您将一行C#代码格式化为完全如何在.cs文件中编写它,将其编译为新方法,加载程序集并执行它。这有点麻烦,所以如果你没有必须执行一个看起来像AMethod的字符串(" Hello"),我强烈推荐反射路径。

    以下是您尝试使用纯反射实现的示例:

        private static void Main(string[] args)
        {
            string methodName = "AMethod";
            object[] parameters = new object [] {"Hello", "foo"};
            MethodInfo method = typeof(Program).GetMethod(methodName, BindingFlags.Static);
            string returnValue = (string)method.Invoke(null, parameters);
        }
    
        public static string AMethod(string parameter1, string parameter2)
        {
            return "xyz" + parameter1 + "abc" + parameter2;
        }
    

    例如2& 3,你可以看一下这个问题:Compiling code dynamically using C#