加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 记录lambda表达式

发布时间:2020-12-15 07:56:43 所属栏目:百科 来源:网络整理
导读:public class Demo{ public void When(FuncPerson,bool condition) { if (!condition) { Log.Info("Condition not met."); return; } // Do something }} 在When方法中,我想记录一个谓词或Func bool返回false.但是,只记录“未满足的条件”并没有给我太多信息
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中没有太多有用的元数据.您可以使用表达式树:
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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读