首页 > 解决方案 > 如何用具有几乎相同结构的另一个对象填充对象?

问题描述

我试图找到最好的方法来用另一个结构几乎相同的构造函数填充我的构造函数,而无需设置每个属性,

所以我在构造函数Altridatiidentificativi中有构造ModelRA函数:

public class Altridatiidentificativi
{
    public string denominazione { get; set; }
    public string indirizzo { get; set; }
    public string numeroCivico { get; set; }
    public string cap { get; set; }
    public string comune { get; set; }
    public string provincia { get; set; }
    public string nazione { get; set; }
    public bool modificati { get; set; }
    public string defAliquotaIVA { get; set; }
    public bool nuovoUtente { get; set; }
}

AltridatiidentificativiDocumenti

    public class Altridatiidentificativi
    {
        public bool nuovoUtente { get; set; }
        public string denominazione { get; set; }
        public string indirizzo { get; set; }
        public string numeroCivico { get; set; }
        public string cap { get; set; }
        public string comune { get; set; }
        public string provincia { get; set; }
        public string nazione { get; set; }
    }

正如你所看到的结构几乎相同,只是构造函数ModelRA有这两个额外的modificatidefAliquotaIVA

所以我想知道是否有可能以某种方式传递到内部ModelRA.AltridatiidentificativiDocumenti.Altridatiidentificativi然后将值添加到额外的

我试图做这样的事情:

 public ModelRA initializeRA(Documento documento)
    {
        ModelRA model = new ModelRA();
        model.altriDatiIdentificativi = <Altridatiidentificativi>(documento.altriDatiIdentificativi);
        model.altriDatiIdentificativi.defAliquotaIVA = "";
        model.altriDatiIdentificativi.modificati = false;

        return model;
    }

但我在<Altridatiidentificativi> “它是特定上下文中不是有效构造函数的类型”中出现错误

有没有办法达到我想要做的事情,或者我必须手动设置所有属性?

标签: c#constructor

解决方案


通常这种模式是一个信号,表明您的业务模型中有一个需要抽象为可组合模式的概念。该类ModelRA.Altridatiidentificativi可能如下所示:

public class Altridatiidentificativi
{
    public ModelRA.Altridatiidentificativi ModelRAAltridatiidentificativi { get; set; }
    public bool modificati { get; set; }
    public string defAliquotaIVA { get; set; }
}

然后您的初始化代码可能如下所示:

    public ModelRA initializeRA(Documento documento)
    {
        ModelRA model = new ModelRA();
        model.altriDatiIdentificativi.ModelRAAltridatiidentificativi = documento;
        model.altriDatiIdentificativi.defAliquotaIVA = "";
        model.altriDatiIdentificativi.modificati = false;

        return model;
    }

切切地我应该提到,使用属性初始化器和构造器通常是一种好习惯,除非您有特定的原因需要初始化方法。

public class Altridatiidentificativi
{
    public string ModelRA.Altridatiidentificativi ModelRAAltridatiidentificativi { get; set; }
    public bool modificati { get; set; } = false; // unnecessary: this is default.
    public string defAliquotaIVA { get; set; } = "";
    public Altridatiidentificativi(ModelRA.Altridatiidentificativi modelRAAltridatiidentificativi)
    {
        this.modelRAAltridatiidentificativi = ModelRAAltridatiidentificativi;
    }
}

推荐阅读