[英]Body from Func<T>
我怎样才能从函数中得到一个身体
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);
}
编辑:有关此主题的更多信息,请参阅:表达式树
你不能。 Func<T>
不是您可以轻松分析的东西。 如果你想分析一个 lambda,你需要创建一个Expression<Func<bool>>
并分析它。
获取表达式的主体很简单:
Expression<Func<bool>> methodCall = () => output.SendToFile();
var body = methodCall.Body;
body
将是MethodCallExpression
您可以进一步分析或仅通过ToString
输出。 使用ToString
不会完全得到您想要的结果,但它也包含该信息。
例如,在 LINQPad 中对body
执行ToString()
导致如下结果:
value(UserQuery+<>c__DisplayClass0).output.SendToFile()
如您所见, "output.SendToFile()"
就在那里。
要实际执行表达式定义的代码,首先需要编译它:
var func = methodCall.Compile();
func();
可以缩短为:
methodCall.Compile()(); // looks strange but is valid.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.