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

ToArray() Method Clones All Instances as Last One

我有一个数组,类型如下;

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 运行 时,所有名称都转换为 "D",这是最后一个。

我找不到解决方案。请帮助我。

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

试试这个模式。

If a == 1
    ContractsList.Add(new ContractListType{ name = "A" } );

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