将函数作为参数传递给system.reflection的invoke方法

时间:2010-10-12 11:42:20

标签: c# function invoke system.reflection

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

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;
}  

参考:http://www.codeproject.com/KB/cs/CallMethodNameInString.aspx

请告诉我该怎么办?

1 个答案:

答案 0 :(得分:1)

问题在于

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();

这里,'f'是一个委托,你可以在其中分配一个lambda表达式(匿名方法),稍后可以通过调用委托f来执行该表达式。