C# 在system.reflection的调用方法中将函数作为参数传递

C# 在system.reflection的调用方法中将函数作为参数传递,c#,function,invoke,system.reflection,C#,Function,Invoke,System.reflection,我得到了一个包含函数层次结构的变量,如: string str= "fun1(fun2(),fun3(fun4(fun5(34,33,'aa'),'value',fun6()))" //此层次结构以字符串形式来自数据库 我已经导入了System.reflection并使用invoke方法来调用它,但只有当我只有一个函数fun1时,它才起作用 在上面的函数层次结构中,它将完整表达式作为一个函数名 我使用以下代码调用我的函数层次结构: public static string InvokeStr

我得到了一个包含函数层次结构的变量,如:

string str= "fun1(fun2(),fun3(fun4(fun5(34,33,'aa'),'value',fun6()))" 
//此层次结构以字符串形式来自数据库

我已经导入了System.reflection并使用invoke方法来调用它,但只有当我只有一个函数
fun1
时,它才起作用

在上面的函数层次结构中,它将完整表达式作为一个函数名

我使用以下代码调用我的函数层次结构:

public static string InvokeStringMethod(string typeName, string methodName)
{
// Get the Type for the class
Type calledType = Type.GetType(typeName);

// Invoke the method itself. The string returned by the method winds up in s
String s = (String)calledType.InvokeMember(
                methodName,
                BindingFlags.InvokeMethod | BindingFlags.Public | 
                    BindingFlags.Static,
                null,
                null,
                null);

// Return the string that was returned by the called method.
return s;
}  
参考:


请告诉我该怎么办?

线路出了问题

string str= fun1(fun2(),fun3(fun4(fun5(34,33,'aa'),'value',fun6()));
表示表达式,也不表示您所称的“函数层次结构”。相反,它执行赋值的右侧计算为字符串值

您可能正在寻找的是:

Func<string> f = () => fun1(fun2(),fun3(fun4(fun5(34,33,'aa'),'value',fun6()));
…
string result = f();
Func f=()=>fun1(fun2(),fun3(fun4)(fun5(34,33,'aa'),'value',fun6());
…
字符串结果=f();

这里,'f'是一个委托,您可以为其分配一个lambda表达式(匿名方法),稍后可以通过调用委托
f

执行。实际上,我正在从表中获取值(函数层次结构),因此它将是字符串形式,而不是函数形式。请建议代码实际状态为
string str=“fun1(…)”是吗?但是,这是一个非常不同的情况。没有办法使用反射来执行这样的表达式。你很可能不得不用CODEDOM编译它到一个临时程序集来执行它。@ RjjESe,欢迎。关于CODEDOM,请看这篇文章:它涵盖了你可能需要的。考虑接受我的ANSWE。r如果有帮助的话:-)