我正在尝试用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;
}
这里的问题是如何编写执行方法
答案 0 :(得分:1)
您提供的链接有您正在寻找的答案。看一下
行 object[] parametersArray = new object[] { "Hello" };
并将其更改为
object[] parametersArray = new object[] { parameter };
答案 1 :(得分:0)
有三种方法可以完成你想要完成的任务:
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#