记录 lambda 表达式

本文关键字:表达式 lambda 记录 | 更新日期: 2023-09-27 18:29:37

public class Demo
{       
    public void When(Func<Person, bool> condition)
    {
        if (!condition)
        {
            Log.Info("Condition not met.");
            return;
        }
        // Do something
    }
}

When方法中,我想记录谓词或Func<bool>何时返回 false。 但是,仅记录"不满足条件"并不能给我太多信息。 如果我像这样调用该方法:

demo.When(x => x.Name == "John");

有没有办法将该表达式转换为可读/有意义的字符串以进行日志记录?

记录 lambda 表达式

普通 lambda 中没有太多有用的元数据。 可以改用表达式树:

void When(Expression<Func<Person, bool>> condition)
{
    var person = new Person();
    if (!condition.Compile()(person))
    {
        Console.WriteLine("Condition not met: " + condition);
        return;
    }
}

然后在呼叫站点:

 When(x => false);

输出将是:

不满足条件:x => 假

但是,表达式树引入了更多的开销,condition.Compile也不便宜。 所以我通常不能推荐这种方法,但它会输出你想要的有用信息。