首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建列表的副本

创建列表的副本
EN

Stack Overflow用户
提问于 2013-10-28 16:17:49
回答 3查看 103关注 0票数 3
代码语言:javascript
复制
List<CatalogInfo> list_catalogs = new List<CatalogInfo>();
List<FileInfo> list_files = new List<FileInfo>(); 
List<CatalogInfo> list_catalogs_for_check_changed = new List<CatalogInfo>();
List<FileInfo> list_files_check_changed = new List<FileInfo>();

当我这样做的时候:

代码语言:javascript
复制
list_catalogs_for_check_changed = list_catalogs;
list_files_check_changed = list_files;

但是当我向list_catalogs或list_files添加项目时,我在debager中看到这些项目会添加到list_catalogs_for_check_changed或list_files_check_changed中。为什么?我不会向变量中添加项目。

代码语言:javascript
复制
  list_catalogs.Add(new CatalogInfo() { Action = "Create", Path = folderBrowserDialog1.SelectedPath });
EN

回答 3

Stack Overflow用户

发布于 2013-10-28 16:22:12

执行此操作时:

代码语言:javascript
复制
list_catalogs_for_check_changed = list_catalogs;

您不是在制作列表的副本,而是将新引用分配给同一列表。如果要创建具有相同项目的新列表,请执行以下操作:

代码语言:javascript
复制
    list_catalogs_for_check_changed = new List<CatalogInfo>(list_catalogs);

这将分配一个新的List<CatalogInfo>,并传递要从中复制元素的列表,从而产生两个具有相同项的独立列表。

票数 6
EN

Stack Overflow用户

发布于 2013-10-28 16:21:40

我不会向变量中添加项目。

实际上,您并不需要。您正在向列表中添加项目。如果你这样做了(从问题中):

代码语言:javascript
复制
list_catalogs_for_check_changed = list_catalogs;
list_files_check_changed = list_files;

list_catalogs_for_check_changedlist_catalogs都持有对CatalogInfo的相同列表的引用。同样,list_fileslist_files_check_changed持有对FileInfos的相同列表的引用。因此,如果您向该列表添加一项,它将通过任一变量可见。

变量不是列表:列表位于托管堆中的某个位置。该变量只是列表的引用。将一个列表变量分配给另一个列表变量会复制reference。It‘ta copy of the list.它不会复制列表。

票数 3
EN

Stack Overflow用户

发布于 2013-10-28 16:22:15

当你这样做的时候

代码语言:javascript
复制
list_catalogs_for_check_changed = list_catalogs;

您正在将reference移交给list_catalogs。你想复制它。

This is an article describing value types vs reference

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19629909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档