C#通过引用分配属性

C#通过引用分配属性,c#,object,reference,C#,Object,Reference,假设我有以下类结构: public class NewClass { public string Name{get;set;} public Int Age{get;set;} } public class ChildClass { public List<NewClass> NewClassList {get;set;} //SomeOther properties } public class ParentClass { pub

假设我有以下类结构:

public class NewClass
{
    public string Name{get;set;}
    public Int Age{get;set;}
}

public class ChildClass
{
     public List<NewClass> NewClassList {get;set;} 
     //SomeOther properties
}

public class ParentClass
{
     public List<NewClass> NewClassList {get;set;}
     public List<ChildClass> ChildClassList {get;set;}           
}
然后,在我的代码中,我想为
firstParent.NewClassList
分配一个值,并希望它自动填充子列表中的所有值

我希望一切都清楚了

编辑:
我已经编辑了要初始化的
NewClassList
,但它不会更新子引用,因此我假设它不是通过引用分配的?

您的自定义类、
NewClass
List
都是引用类型

发件人:

C#中有两种类型:引用类型和值类型。引用类型的变量存储对其数据(对象)的引用,而值类型的变量直接包含其数据对于引用类型,两个变量可以引用同一个对象;因此,对一个变量的操作可能会影响另一个变量引用的对象。对于值类型,每个变量都有自己的数据副本,对一个变量的操作不可能影响另一个变量(in、ref和out参数变量除外;请参阅in、ref和out参数修饰符)

[我的重点]

因此,要完成您想要的任务,您只需将每个子级的
NewClassList
属性分配给其父级的
NewClassList

var firstParent=新父类
{
NewClassList=新列表(),
ChildClassList=新列表()
};
firstParent.ChildClassList.Add(新的子类
{
NewClassList=firstParent.NewClassList
});
firstParent.ChildClassList.Add(新的子类
{
NewClassList=firstParent.NewClassList
});
firstParent.NewClassList.Add(新类
{
Name=“休·曼”,
年龄=48
});
//长辈和两个孩子现在都有休·曼。
firstParent.ChildClassList[0].NewClassList.Add(新建类
{
Name=“Sillius Soddus”,
年龄=43
});
//第一个父母和两个孩子现在都有Sillius Soddus。
firstParent.ChildClassList[1].NewClassList.Add(新建类
{
Name=“乔安娜舞蹈”,
年龄=62
});
//长辈和两个孩子现在都有乔安娜舞蹈。
firstParent.NewClassList[0]。年龄=23;
//休·曼现在的第一父母及其子女年龄为23岁
如果要为父级或子级分配不同的列表,则它们将不再引用相同的列表。对一个列表的更改不会发生在另一个列表上,因为它们引用的是完全不同的列表

var firstParent=新父类
{
NewClassList=新列表(),
ChildClassList=新列表()
};
firstParent.ChildClassList.Add(新的子类
{
NewClassList=firstParent.NewClassList
});
firstParent.ChildClassList[0].NewClassList.Add(新建类
{
Name=“Sillius Soddus”,
年龄=43
});
//第一个父代和它的子代现在包含Sillius Soddus。
firstParent.NewClassList=新列表
{
新班级
{
Name=“休·曼”,
年龄=22
}
};
//firstParent.NewClassList现在引用一个完全不同的列表。它包含Hugh Mann,而firstParent.ChildClassList[0]包含Sillius Soddus。
firstParent.NewClassList.Add(新类
{
Name=“Ian D.Dark”,
年龄=33
});
//firstParent.NewClassList现在包含Hugh Mann和Ian D.Dark。由于firstParent.ChildClassList[0]引用了一个完全不同的列表,因此它仍然只包含Sillius Soddus。

自定义类、
NewClass
List
都是引用类型

发件人:

C#中有两种类型:引用类型和值类型。引用类型的变量存储对其数据(对象)的引用,而值类型的变量直接包含其数据对于引用类型,两个变量可以引用同一个对象;因此,对一个变量的操作可能会影响另一个变量引用的对象。对于值类型,每个变量都有自己的数据副本,对一个变量的操作不可能影响另一个变量(in、ref和out参数变量除外;请参阅in、ref和out参数修饰符)

[我的重点]

因此,要完成您想要的任务,您只需将每个子级的
NewClassList
属性分配给其父级的
NewClassList

var firstParent=新父类
{
NewClassList=新列表(),
ChildClassList=新列表()
};
firstParent.ChildClassList.Add(新的子类
{
NewClassList=firstParent.NewClassList
});
firstParent.ChildClassList.Add(新的子类
{
NewClassList=firstParent.NewClassList
});
firstParent.NewClassList.Add(新类
{
Name=“休·曼”,
年龄=48
});
//长辈和两个孩子现在都有休·曼。
firstParent.ChildClassList[0].NewClassList.Add(新建类
{
Name=“Sillius Soddus”,
年龄=43
});
//第一个父母和两个孩子现在都有Sillius Soddus。
firstParent.ChildClassList[1].NewClassList.Add(新建类
{
Name=“乔安娜舞蹈”,
年龄=62
});
//长辈和两个孩子现在都有乔安娜舞蹈。
firstParent.NewClassList[0]。年龄=23;
//休·曼现在的第一父母及其子女年龄为23岁
如果要为父级或子级分配不同的列表,则它们将不再引用相同的列表。对一个列表的更改不会发生在另一个列表上,因为它们引用的是完全不同的列表

var firstParent=新父类
{
NewClassList=新列表(),
ChildClassList=新列表()
};
firstParent.ChildClassList.Add(新的子类
{
NewClassList=firstParent.NewClassList
});
firstParent.ChildClassList[0].NewClassList.Add(新建类
{
Name=“Sillius Soddus”,
年龄=43
});
//第一个父代和它的子代现在包含Sillius Soddus。
firstParent.NewClassList=新列表
{
新班级
{
Name=“休·曼”,
年龄=22
}
};
//firstParent.NewClassList现在引用
var firstParent = new ParentClass
{
    ChildClassList = new List<ChildClass> {//lots of entries},
    NewClassList  = new List<NewClass>()
}