Есть ли способ инициализировать свойства после построения объекта?

У меня есть 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 ответ

Решение

Да, просто передайте значение в качестве параметра в конструкторе. Это единственный способ:

Conversion cvr = new Conversion(rules, package);

Где конструктор:

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

   ...
}

Вы можете по умолчанию rules параметр для вашего другого конструктора, поэтому вам не нужно дублировать код:

public Conversion(ExcelPackage package) : this(new Rule[] { ... }, package)
{
   ...
}
Другие вопросы по тегам