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>();当我这样做的时候:
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中。为什么?我不会向变量中添加项目。
list_catalogs.Add(new CatalogInfo() { Action = "Create", Path = folderBrowserDialog1.SelectedPath });发布于 2013-10-28 16:22:12
执行此操作时:
list_catalogs_for_check_changed = list_catalogs;您不是在制作列表的副本,而是将新引用分配给同一列表。如果要创建具有相同项目的新列表,请执行以下操作:
list_catalogs_for_check_changed = new List<CatalogInfo>(list_catalogs);这将分配一个新的List<CatalogInfo>,并传递要从中复制元素的列表,从而产生两个具有相同项的独立列表。
发布于 2013-10-28 16:21:40
我不会向变量中添加项目。
实际上,您并不需要。您正在向列表中添加项目。如果你这样做了(从问题中):
list_catalogs_for_check_changed = list_catalogs;
list_files_check_changed = list_files;则list_catalogs_for_check_changed和list_catalogs都持有对的CatalogInfo的相同列表的引用。同样,list_files和list_files_check_changed持有对的FileInfos的相同列表的引用。因此,如果您向该列表添加一项,它将通过任一变量可见。
变量不是列表:列表位于托管堆中的某个位置。该变量只是列表的引用。将一个列表变量分配给另一个列表变量会复制reference。It‘ta copy of the list.它不会复制列表。
发布于 2013-10-28 16:22:15
当你这样做的时候
list_catalogs_for_check_changed = list_catalogs;您正在将reference移交给list_catalogs。你想复制它。
This is an article describing value types vs reference
https://stackoverflow.com/questions/19629909
复制相似问题