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/