从行动中获取对象

时间:2017-10-23 10:18:52

标签: c#

我有一个在其构造函数上执行Action的类。我希望类字段_options值成为该操作的值。

我试图使用:

_options = options;

但是这不能编译。完整的代码是:

public class PortableObjectTemplate {

  private PortableObjectTemplateOptions _options { get; set; }

  public PortableObjectTemplate(Action<PortableObjectTemplateOptions> options) {
    _options = options;
  }
}

我正在尝试将此类用作:

PortableObjectTemplate pot = new PortableObjectTemplate(x => {
  x.SearchPath = "/";
  x.BlackList = "*.cs";
});

我该怎么做?

2 个答案:

答案 0 :(得分:4)

正如评论中所提到的,Action是一个根本不返回任何内容的代表(或void)。如果您希望代理人返回任何内容,则应使用Func<T>执行

public PortableObjectTemplate(Func<PortableObjectTemplateOptions> options) {
    _options = options();
}

当然,您应该在执行options之前检查null是否_options = options?.Invoke(); (C#6以上):

options = options == null ? default(PortableObjectTemplate) : options();

或者替代地:

{{1}}

答案 1 :(得分:0)

尝试一下。创建一个新实例,并将其传递给Invoke,这将设置所有属性。

public PortableObjectTemplate(Action<PortableObjectTemplateOptions> options) {

     var newOptions = new PortableObjectTemplateOptions();
    _options = options.Invoke(newOptions);

OR

     options.Invoke(_options);
  }