c# – 来自Func的身体

前端之家收集整理的这篇文章主要介绍了c# – 来自Func的身体前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我如何从功能获取身体
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);
        }

解决方法

你不能. A Func< T>没什么可以轻易分析的.如果要分析lambda,则需要创建Expression< Func< bool>>并分析它.

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

Expression<Func<bool>> methodCall = () => output.SendToFile(); 
var body = methodCall.Body;

body是一个MethodCallExpression,你可以进一步分析或只是通过ToString输出.使用ToString不会完全符合您的想法,但它也包含该信息.

例如,在LINQPad中对主体执行ToString()会导致如下所示:

value(UserQuery+<>c__DisplayClass0).output.SendToFile()

如您所见,“output.SendToFile()”就在那里.

要实际执行表达式定义的代码,首先需要编译它:

var func = methodCall.Compile();
func();

可以缩短到这个:

methodCall.Compile()(); // looks strange but is valid.
原文链接:https://www.f2er.com/csharp/92109.html

猜你在找的C#相关文章