如何用几乎相同结构的另一个对象填充对象?

时间:2020-04-14 14:57:27

标签: c# constructor

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

所以我在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; }
}

还有Altridatiidentificativi中的Documenti

    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.Altridatiidentificativi传递到Documenti.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>中遇到错误“在特定上下文中,这是一种无效的构造函数”

是否有办法达到我要执行的操作,或者我必须手动设置所有属性?

1 个答案:

答案 0 :(得分:1)

通常,这种模式表明您的业务模型中存在一个需要抽象为可组合模式的概念。 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;
    }
}
相关问题