对象 initzializer/constructor lambda 表达式的自引用
Object initzializer/constructor self reference for lambda expression
我有一个简单的过滤器 class 看起来像这样:
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;
是否可以将示例简化为一个语句?
不,您不能在该变量的初始化程序中引用该变量。定义后才能引用
这是不可能的,但如果符合您的要求,我建议您再向 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 的值作为 Match 的第二个参数
我有一个简单的过滤器 class 看起来像这样:
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;
是否可以将示例简化为一个语句?
不,您不能在该变量的初始化程序中引用该变量。定义后才能引用
这是不可能的,但如果符合您的要求,我建议您再向 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 的值作为 Match 的第二个参数