Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 方法将所有实例克隆为最后一个实例_C#_.net_Arrays_List_Add - Fatal编程技术网

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()
方法通常只包含您为“手动”方法所做的代码,并且只返回生成的
新的
对象)。