ToArray()方法将所有实例克隆为最后一个

时间:2016-04-05 17:00:25

标签: c# .net arrays list add

我有一个数组和类型;

List<ContractListType> ContractsList = new List<ContractListType>();
ContractListType instance = new ContractListType(); 

我通过

在我的ContractsList 4中添加了4个元素
If a == 1
    instance.name = "A"
    ContractsList.Add(instance);
If b == 1
    instance.name = "B"
    ContractsList.Add(instance);
If c == 1
    instance.name = "C"
    ContractsList.Add(instance);
If d == 1
    instance.name = "D"
    ContractsList.Add(instance);

最后我希望将我的列表与回复相匹配。

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>

当我调试时,在响应之前我可以看到conractsList中的所有名称,但是当ToArray运行时,所有名称都转换为&#34; D&#34;,这是最后一个。

我无法找到解决方案。请帮帮我。

1 个答案:

答案 0 :(得分:4)

使用.NET / C#,您不是将对象本身添加到列表中,而是添加对象的引用。您的代码将添加相同的引用4次并修改引用。您需要克隆该对象并更改其属性,然后再将其添加到列表中以实现所需的结果。

尝试这种模式。

$_

MSDN提供了一个很好的implementing a Deep copy of your object示例。