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

C# 如何用另一个结构几乎相同的对象填充对象?,c#,constructor,C#,Constructor,我试图找到一种最好的方法,在不设置每个属性的情况下,用另一个结构几乎相同的构造函数填充我的构造函数 因此,我在ModelRA构造函数中有构造函数altridatiIdentificationvi: public class Altridatiidentificativi { public string denominazione { get; set; } public string indirizzo { get; set; } public string numero

我试图找到一种最好的方法,在不设置每个属性的情况下,用另一个结构几乎相同的构造函数填充我的构造函数

因此,我在
ModelRA
构造函数中有构造函数
altridatiIdentificationvi

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; }
}
Documenti
中的
altridatiIdentificationvi

    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
中的构造函数有两个额外的
modificati
defalikotaiva

因此,我想知道是否有可能以某种方式将
modelera.altridatiIdentificationvi
传递到
Documenti.altridatiIdentificationvi
内部,然后将值添加到额外的

我试着这样做:

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

        return model;
    }
公共模型初始化(Documento Documento) { ModelRA model=新ModelRA(); model.altridatiidentificationvi=(documento.altridatiidentificationvi); model.altridatiIdentificationvi.defalikotaiva=“”; model.altridatiidentificationvi.modificationi=假; 收益模型; } 但是我在
中得到错误:“它是一个类型,在特定上下文中不是有效的构造函数”


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

通常,此模式表示您的业务模型中存在需要抽象为可组合模式的概念。
ModelRA.altridatiIdentificationVI
类可以如下所示:

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;
    }
}

首先,请了解:什么是C#中的构造函数。您可以使用两个模型的公共接口或公共基类来解决您的任务。@Maradik实际上我“被迫”使用两个拆分模型,因此使用一个公共接口或公共基类不是解决方案问题中没有构造函数。我想您指的是“结构”(可能更好的用户类或对象)而不是“构造函数”还有大量关于堆栈溢出的问题和答案,讨论使用反射在同一类型的两个实例之间复制属性。该场景的代码可以很容易地适应您自己的场景。在将您的问题发布到Stack Overflow之前,请进行一些研究。在尝试使用automapper之后,我最终使用了以下解决方案,因为它让我获得了更可读和更易理解的代码,但是,如果我将一个嵌套在另一个嵌套对象中,以便向嵌套对象添加值,我必须首先初始化子对象,但仅初始化父对象是不够的?@IgorMytyuk:如果子对象有合理的默认值,无论何时构造子对象,都可以使用属性初始值设定项来设置这些值,然后在父对象的属性上使用属性初始值设定项将其设置为默认的
新ModelRA.AltridatiIdentificationVI()
,从而避免将其作为构造函数参数。