【问题标题】:Object initzializer/constructor self reference for lambda expression用于 lambda 表达式的对象初始化器/构造器自引用
【发布时间】:2015-10-16 21:11:58
【问题描述】:

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

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;

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

【问题讨论】:

    标签: c# lambda object-initializers


    【解决方案1】:

    不,您不能在该变量的初始化程序中引用该变量。定义后才能引用。

    【讨论】:

      【解决方案2】:

      这是不可能的,但如果它符合您的要求,我可以建议在 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 的第二个参数传递

      【讨论】:

        猜你喜欢
        • 2011-03-10
        • 1970-01-01
        • 2012-09-23
        • 1970-01-01
        • 1970-01-01
        • 2013-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多