【问题标题】:Logging lambda expressions记录 lambda 表达式
【发布时间】:2012-03-29 18:13:00
【问题描述】:
public class Demo
{       
    public void When(Func<Person, bool> condition)
    {
        if (!condition)
        {
            Log.Info("Condition not met.");
            return;
        }

        // Do something
    }
}

When 方法中,我想在谓词或Func&lt;bool&gt; 返回false 时记录。但是,仅记录“未满足条件”并没有给我太多信息。如果我这样调用方法:

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

有没有办法将该表达式转换为可读/有意义的字符串以用于记录目的?

【问题讨论】:

标签: c# lambda


【解决方案1】:

普通 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 => False

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多