Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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#_List_Copy - Fatal编程技术网

C# 将列表复制到其他列表

C# 将列表复制到其他列表,c#,list,copy,C#,List,Copy,我对列表有问题,我想复制原始列表,因为如果我更改列表副本中的值,则会修改原始列表的值,列表的类型为账单的详细信息,因为我尝试了以下操作,但不起作用 List<detail> detail = new List<detail>(); detail = saleController.getAll(); List<detail> copyDetail = new List<detail>(detail); List detail=新列表(); det

我对列表有问题,我想复制原始列表,因为如果我更改列表副本中的值,则会修改原始列表的值,列表的类型为账单的详细信息,因为我尝试了以下操作,但不起作用

List<detail> detail = new List<detail>(); 
detail = saleController.getAll();
List<detail> copyDetail = new List<detail>(detail);
List detail=新列表();
detail=saleController.getAll();
列表副本详细信息=新列表(详细信息);

感谢您对我的问题提供的帮助

对于要复制的集合中的每个对象,您可以复制它并将其添加到目标集合。如何复制该实例可能取决于要复制的实例类型。也就是说,该类是否具有复制构造函数?

对于要复制的集合中的每个对象,可以复制它并将其添加到目标集合中。如何复制该实例可能取决于要复制的实例类型。也就是说,该类是否有一个复制构造函数?

听起来像是
detail
是一个引用类型。复制列表时,每个列表(其备份存储是一个数组)都包含对同一组
detail
实例的引用

您需要进行深度复制或克隆

如果
detail
实现
ICloneable
很容易:

List<detail> original = GetListOfDetails() ;
List<detail> clone    = original.Select( x => x.Clone() ).Cast<detail>().ToList() ;

听起来
detail
是一种参考类型。复制列表时,每个列表(其备份存储是一个数组)都包含对同一组
detail
实例的引用

您需要进行深度复制或克隆

如果
detail
实现
ICloneable
很容易:

List<detail> original = GetListOfDetails() ;
List<detail> clone    = original.Select( x => x.Clone() ).Cast<detail>().ToList() ;
List detail=新列表();
detail=saleController.getAll();
List copyDetail=新列表();
copyDetail=detail.Clone();
列表详细信息=新列表();
detail=saleController.getAll();
List copyDetail=新列表();
copyDetail=detail.Clone();

克隆这样的对象将修改原始对象。必须使用somthin(如Foreach)将原始列表的值复制到另一个列表:

private void btnCopy_Click(object sender, EventArgs e)
    {
        List<detail> detail = new List<detail>();
        List<detail> CopyDetail = new List<detail>();
        detail.Add(new detail{item1=1,item2=1});
        foreach (detail item in detail)
        {
            CopyDetail.Add(new detail{item1=item.item1,item2=item.item2});
        }

    }


public class detail

{
    public int item1;
    public int item2;
}
private void btnCopy\u单击(对象发送者,事件参数e)
{
列表详细信息=新列表();
List CopyDetail=新列表();
Add(新的细节{item1=1,item2=1});
foreach(详细项目详细信息)
{
添加(新的详细信息{item1=item.item1,item2=item.item2});
}
}
公共类详细信息
{
公共项目1;
公共项目2;
}

克隆这样的对象将修改原始对象。必须使用somthin(如Foreach)将原始列表的值复制到另一个列表:

private void btnCopy_Click(object sender, EventArgs e)
    {
        List<detail> detail = new List<detail>();
        List<detail> CopyDetail = new List<detail>();
        detail.Add(new detail{item1=1,item2=1});
        foreach (detail item in detail)
        {
            CopyDetail.Add(new detail{item1=item.item1,item2=item.item2});
        }

    }


public class detail

{
    public int item1;
    public int item2;
}
private void btnCopy\u单击(对象发送者,事件参数e)
{
列表详细信息=新列表();
List CopyDetail=新列表();
Add(新的细节{item1=1,item2=1});
foreach(详细项目详细信息)
{
添加(新的详细信息{item1=item.item1,item2=item.item2});
}
}
公共类详细信息
{
公共项目1;
公共项目2;
}

我想我现在明白你的问题了。当你说“更改列表副本中的值”时,你的意思是更改列表副本中对象内的值,对吗?我的类具有价格、质量、销售、产品等属性,那么我需要更改列表副本的属性我想我现在明白你的问题了。当您说“更改列表副本中的值”时,您的意思是更改列表副本中对象内的值,对吗?我的类具有价格、质量、销售、,产品然后我需要更改我的列表副本的属性请对您提供的解决方案的关键方面添加一些说明。请对您提供的解决方案的关键方面添加一些说明。我没有副本构造函数。我没有副本构造函数。尝试实现您的解决方案,但仍然不起作用,我会这样评论我的项目,我有销售类,产品和细节,这是我的类产品销售的多对多关系。值得注意的是,使用nhibernate sale,在我的课程中有一个详细的列表,然后我不知道在哪里实现该方法,我感谢您的帮助。尝试实现您的解决方案,但仍然不起作用,我会这样评论我的项目,我有课程可供销售,产品与细节这是我班产品销售中的多对多关系。值得注意的是,使用nhibernate销售,在我的课堂上有一个详细的列表,然后我不知道在哪里实现该方法,我感谢您的帮助。谢谢您的回复,试试这个,但我总是指向同一个内存地址,并在更改副本列表时使我更改原始列表。@baxi2990我编辑了答案并尝试了。它起作用了!希望这有帮助。:)谢谢@Alex Jolig这是解决方案:)谢谢你的回复,试试这个,但我总是指向同一个内存地址,并在更改副本列表时让我更改原始列表。@baxi2990我编辑了答案并尝试了它。它起作用了!希望这有帮助。:)谢谢@Alex Jolig这是解决方案:)