从C#中的string调用函数

我知道在PHP中,你可以打个电话:

$function_name = 'hello'; $function_name(); function hello() { echo 'hello'; } 

这是可能的。净?

是。 你可以使用reflection。 像这样的东西:

 Type thisType = this.GetType(); MethodInfo theMethod = thisType.GetMethod(TheCommandString); theMethod.Invoke(this, userParameters); 

您可以使用reflection调用类实例的方法,执行dynamic方法调用:

假设在实际的实例(this)中有一个名为hello的方法:

 string methodName = "hello"; //Get the method information using the method info class MethodInfo mi = this.GetType().GetMethod(methodName); //Invoke the method // (null- no parameter for the method call // or you can pass the array of parameters...) mi.Invoke(this, null); 
 class Program { static void Main(string[] args) { Type type = typeof(MyReflectionClass); MethodInfo method = type.GetMethod("MyMethod"); MyReflectionClass c = new MyReflectionClass(); string result = (string)method.Invoke(c, null); Console.WriteLine(result); } } public class MyReflectionClass { public string MyMethod() { return DateTime.Now.ToString(); } } 

轻微的切线 – 如果要分析和计算包含(嵌套!)函数的整个expression式string,请考虑NCalc( http://ncalc.codeplex.com/和nuget);

防爆。 从项目文档稍作修改:

 // the expression to evaluate, eg from user input (like a calculator program, hint hint college students) var exprStr = "10 + MyFunction(3, 6)"; Expression e = new Expression(exprString); // tell it how to handle your custom function e.EvaluateFunction += delegate(string name, FunctionArgs args) { if (name == "MyFunction") args.Result = (int)args.Parameters[0].Evaluate() + (int)args.Parameters[1].Evaluate(); }; // confirm it worked Debug.Assert(19 == e.Evaluate()); 

EvaluateFunction委托内,您可以调用您的现有函数。

事实上,我正在使用Windows Workflow 4.5,我必须find一种方法来将一个委托从一个状态机传递给一个没有成功的方法。 我find的唯一方法是传递一个string作为委托传递的方法的名称,并将string转换为方法内部的委托。 非常好的答案。 谢谢。 检查此链接https://msdn.microsoft.com/en-us/library/53cz7sc6(v=vs.110).aspx

在C#中,您可以创build委托作为函数指针。 查阅以下MSDN文章以获得有关使用的信息: http : //msdn.microsoft.com/zh-cn/library/ms173171(VS.80).aspx

  public static void hello() { Console.Write("hello world"); } /* code snipped */ public delegate void functionPointer(); functionPointer foo = hello; foo(); // Writes hello world to the console.