来自Func 的身体

我如何从function中获取身体

Func methodCall = () => output.SendToFile(); if (methodCall()) Console.WriteLine("Success!"); 

我需要将此“output.SendToFile()”作为字符串

另一个例子

 string log = ""; public void Foo(Func 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 。 如果要分析lambda,则需要创建Expression>并对其进行分析。

获取表达式的主体很简单:

 Expression> 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.