有没有办法在构造对象后初始化属性?

时间:2014-12-04 10:52:39

标签: c# .net constructor object-initializers

我有一个Conversion类,如下所示:

public class Conversion
{
    public memorySource MSource { get; set; }
    public Rule[] Rules { get; set; }
    public Conversion(XElement xElement)
    {
       // I use Rules property here 
       // From Rules property and xElement parameter i initialize MSource Property
    }

    public Conversion(ExcelPackage)
    {
       // Also i use Rules property here 
       // From Rules property and xElement parameter i initialize MSource Property
    }
}

当我想构建Conversion类的实例时,我这样做:

Conversion cvr = new Conversion(xElement) { Rules = rules };

然后我收到此错误:

  

对象引用未设置为对象的实例

我知道对象的构造在初始化属性之前就开始了,但有没有办法做反向?

我可以使用Rules属性作为构造函数的参数,但它不适合性能,因为我有几个构造函数。

1 个答案:

答案 0 :(得分:2)

是的,只需将值作为参数传递给构造函数。这是唯一的方法:

Conversion cvr = new Conversion(rules, package);

构造函数在哪里:

public Conversion(Rule[] rules, ExcelPackage package)
{
   this.Rules = rules;

   ...
}

您可以为其他构造函数默认rules参数,因此您不必复制代码:

public Conversion(ExcelPackage package) : this(new Rule[] { ... }, package)
{
   ...
}