我有一个在其构造函数上执行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";
});
我该怎么做?
答案 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);
}