C# 方法将所有实例克隆为最后一个实例
我有一个数组和一个类似的类型C# 方法将所有实例克隆为最后一个实例,c#,.net,arrays,list,add,C#,.net,Arrays,List,Add,我有一个数组和一个类似的类型 List<ContractListType> ContractsList = new List<ContractListType>(); ContractListType instance = new ContractListType(); 最后,我想将我的列表与响应匹配 response.GetContractListResponse.GetContractListResponseDTO.ContractListType = Contr
List<ContractListType> ContractsList = new List<ContractListType>();
ContractListType instance = new ContractListType();
最后,我想将我的列表与响应匹配
response.GetContractListResponse.GetContractListResponseDTO.ContractListType = ContractsList.ToArray();
虽然a=1,b=2,c=3,d=4;我的回答是
<name>D</name>
<name>D</name>
<name>D</name>
<name>D</name>
D
D
D
D
当我调试时,在响应之前,我可以看到conractsList中的所有名称,但当ToArray运行时,所有名称都转换为“D”,这是最后一个名称
我找不到解决办法。请帮帮我。使用.NET/C#,您不是将对象本身添加到列表中,而是将对象的引用添加到列表中。您的代码将添加相同的引用4次并修改该引用。您需要克隆对象并更改其属性,然后才能将其添加到列表中,以获得所需的结果
试试这个模式
If a == 1
ContractsList.Add(new ContractListType{ name = "A" } );
MSDN提供了一个很好的例子。对于.NET/C#,您不是将对象本身添加到列表中,而是将对象的引用添加到列表中。您的代码将添加相同的引用4次并修改该引用。您需要克隆对象并更改其属性,然后才能将其添加到列表中,以获得所需的结果
试试这个模式
If a == 1
ContractsList.Add(new ContractListType{ name = "A" } );
MSDN提供了一个很好的示例。我看到您了,但在添加到列表之前不知道如何克隆对象并更改其属性。你能举个例子吗?创建一个新的构造函数,它接受相同类型的参数并复制属性。请注意,作为引用类型(类)的属性也需要自己的克隆。@Gyepsto在.NET中没有可靠克隆对象的通用方法。通常,您必须在对象中提供一个自定义的
.Clone()
方法,或者像Babak显示的那样在需要时手动重建它(.Clone()
方法通常只包含您为“手动”方法所做的代码,并且只返回结果新的对象。)。我明白了,但在添加到列表之前,不知道如何克隆对象并更改其属性。你能举个例子吗?创建一个新的构造函数,它接受相同类型的参数并复制属性。请注意,作为引用类型(类)的属性也需要自己的克隆。@Gyepsto在.NET中没有可靠克隆对象的通用方法。通常,您必须在对象中提供一个自定义的.Clone()
方法,或者像Babak显示的那样在需要时手动重建它(.Clone()
方法通常只包含您为“手动”方法所做的代码,并且只返回生成的新的对象)。