lambda表达式的对象初始化器/构造器自引用

本文关键字:构造器 自引用 初始化 表达式 对象 lambda | 更新日期: 2023-09-27 18:18:00

我有一个简单的过滤器类,看起来像这样:

public class DateFilter
{
    public DateTime Value { get; set; }
    public Func<FilterObject, bool> Match { get; set; }
}

是否可以在构造函数或对象初始化器中使用局部值初始化Match函数?

过滤器创建后赋值的示例:

var df = new DateFilter();
df.Match = (input) => df.Value > input.Date;

是否有可能将示例简化为一个语句?

lambda表达式的对象初始化器/构造器自引用

不能,不能在变量的初始化项中引用该变量。

这是不可能的,但我可以建议在func中添加一个参数,如果它符合您的要求

public class DateFilter
{
    public DateTime Value { get; set; }
    public Func<FilterObject, DateTime, bool> Match { get; set; }
    public DateFilter(Func<FilterObject, DateTime, bool> predicate)
    {
        Match = predicate;
    }
}
var df = new DateFilter( (input, val) => val > input.Date));

假设您将传递dateffilter的值作为Match的第二个参数