我怎样才能从函数中获得身体
Func<bool> methodCall = () => output.SendToFile();
if (methodCall())
Console.WriteLine("Success!");
我需要得到这个output.SendToFile()
作为字符串
另一个例子:
string log = "";
public void Foo<T>(Func<T> func)
{
try
{
var t = func();
}
catch (Exception)
{
//here I need to add the body of the lambda
// log += func.body;
}
}
public void Test()
{
var a = 5;
var b = 6;
Foo(() => a > b);
}
编辑:
有关此主题的更多信息,请参阅:表达式树 http://msdn.microsoft.com/en-us/library/bb397951.aspx
你不能。 AFunc<T>
没有什么可以轻易分析的。如果你想分析 lambda,你需要创建一个Expression<Func<bool>>
并对其进行分析。
获取表达式的主体很简单:
Expression<Func<bool>> methodCall = () => output.SendToFile();
var body = methodCall.Body;
body
将是一个MethodCallExpression
您可以进一步分析或仅通过输出ToString
. Using ToString
不会完全产生您想要的结果,但它也包含该信息。
例如,执行ToString()
on body
在 LINQPad 中结果如下:
value(UserQuery+<>c__DisplayClass0).output.SendToFile()
如你看到的,"output.SendToFile()"
有没有。
要实际执行表达式定义的代码,首先需要编译它:
var func = methodCall.Compile();
func();
可以简化为:
methodCall.Compile()(); // looks strange but is valid.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)