gpt4 book ai didi

c# - 如何从 lambda 表达式中获取值?

转载 作者:太空宇宙 更新时间:2023-11-03 21:04:08 24 4
gpt4 key购买 nike

我有这门课:

public class CustomerFilter
{
public int Id { get; set; }
public int Name { get; set; }
}

它是这样使用的:

public class Search
{
private Expression<Func<CustomerFilter, bool>> customerfilter;

public Expression<Func<CustomerFilter, bool>> CustomerFilter
{
set { customerfilter = value; }
}
}

var search = new Search();
search.CustomerFilter = (x => x.Id == 1);

在搜索类中,如何在不使用 ExpressionVisitor 的情况下获取属性值?像这样的东西:

var customerId = customerFilter.Id; //Or something similar

最佳答案

不太明白为什么需要它。但是,您可以这样做:

public class Search
{
private Expression<Func<CustomerFilter, bool>> customerfilter;

public Expression<Func<CustomerFilter, bool>> CustomerFilter
{
set { customerfilter = value; }
}

public object GetValue(CustomerFilter filter)
{
var property = (customerfilter.Body as BinaryExpression).Left;
var lambda =Expression.Lambda(property, customerfilter.Parameters.First());
return lambda.Compile().DynamicInvoke(filter);
}
}

这样的用法:

var search = new Search();
search.CustomerFilter = (x => x.Id == 1);
var filter = new CustomerFilter {Id = 12};
search.GetValue(filter).Dump();

我得到 12 作为输出

关于c# - 如何从 lambda 表达式中获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42385812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com