c# - 记录 lambda 表达式

标签 c# lambda

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

        // Do something
    }
}

When方法,我想在谓词或 Func<bool> 时记录返回假。但是,仅记录“不满足条件”并不能提供太多信息。如果我这样调用方法:

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

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

最佳答案

普通的 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);

输出将是:

Condition not met: x => False

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

关于c# - 记录 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9931023/

相关文章:

c# - 使用字符串或其他格式比较数据类型

c# - 将公共(public)字符串变量打印到 ASP.NET 中的页面

c# - 如何获取 Lambda MemberExpression 的值

java - 了解具有超过 1 个参数的简单 lambda

amazon-web-services - 有没有办法从 AWS Lambda 报告自定义 DataDog 指标?

c# - Ninject 和 DataContext 处置

c# - 类型和获取类型

c# - System.ComponentModel.TypeConverter 的 WinRT 替换

c# - linq to sql使用lambda连接多列

Java 8 避免大量 if/else 语句