lambda表达式的对象initzializer /构造函数自引用

时间:2015-10-16 21:11:58

标签: c# lambda object-initializers

我有一个简单的过滤器类,如下所示:

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;

是否可以将示例缩减为一个语句?

2 个答案:

答案 0 :(得分:3)

不,您无法在初始值设定项中为该变量引用变量。您只能在定义后引用它。

答案 1 :(得分:0)

这是不可能的,但如果符合您的要求,我可以建议在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));

假设您将DateFilter的值作为匹配的第二个参数