C# 字典和数组列表的一个问题

C# 字典和数组列表的一个问题,c#,dictionary,arraylist,C#,Dictionary,Arraylist,我有一个字典,其中RFile是一个类,这个字典保存了将在listview中显示的所有数据 问题是:程序将使用从关联的listViewItem获得的键从字典中获取RFile类,然后将其添加到ArrayList中 ArrayList Files = new ArrayList(); Foreach (ListViewItem lvi in LV.Groups[1].Items) { Files.Add(Dict[lvi.tag]); } 然后ArrayLis

我有一个字典,其中RFile是一个类,这个字典保存了将在listview中显示的所有数据

问题是:程序将使用从关联的listViewItem获得的键从字典中获取RFile类,然后将其添加到ArrayList中

ArrayList Files = new ArrayList();
Foreach (ListViewItem lvi in LV.Groups[1].Items)
     {
          Files.Add(Dict[lvi.tag]);
     }
然后ArrayList中的文件按值(没有在方法标识符中放入Ref)发送到一个方法,该方法将处理这些文件并对文件ArrayList中的条目进行一些更改,但是这些更改也应用于原始字典(我不知道那里的值会发生更改)

我所知道的是,我不会通过引用传递任何数据,除非使用键从字典中获取值是通过引用完成的


提前谢谢大家。

我想您需要一个关于
值类型
参考类型
的教程

如果说
RFile
是一个类,那么对
RFile
实例的任何更改都将反映在它共享相同
RFile
实例的所有其他地方,因为它是一个“引用类型”,无论您是否将其作为
ref
传递

ref
关键字的用途不同,这超出了这个问题的重点。您可能还需要了解
ref
关键字


这里有一个关于的好资源,我想你需要一个关于
ValueTypes
ReferenceTypes
的教程

如果说
RFile
是一个类,那么对
RFile
实例的任何更改都将反映在它共享相同
RFile
实例的所有其他地方,因为它是一个“引用类型”,无论您是否将其作为
ref
传递

ref
关键字的用途不同,这超出了这个问题的重点。您可能还需要了解
ref
关键字


这里有一个关于

的好资源,类总是通过引用传递的,即使您不使用ref关键字

您可以实现ICloanable接口并克隆对象,这样更改不会影响原始对象:

ArrayList Files = new ArrayList();
Foreach (ListViewItem lvi in LV.Groups[1].Items)
{
          Files.Add(Dict[lvi.tag].Clone());
}


类始终通过引用传递,即使您不使用ref关键字

您可以实现ICloanable接口并克隆对象,这样更改不会影响原始对象:

ArrayList Files = new ArrayList();
Foreach (ListViewItem lvi in LV.Groups[1].Items)
{
          Files.Add(Dict[lvi.tag].Clone());
}


当您执行
Files.Add(Dict[lvi.tag])
操作时,实际上只添加了对字典中与
lvi.tag
关联的对象的引用。如果不希望更改传播,则必须复制该对象。执行
Files.Add(Dict[lvi.tag])
时,实际上只添加了对字典中与
lvi.tag
关联的对象的引用。如果不希望更改传播,则必须复制对象。感谢您指出,类数据在所有实例之间共享,我从来不知道这一点。我想知道(只是为了了解更多)是否有其他方法可以在不添加接口的情况下进行克隆?当然,您可以定义自己的方法来克隆对象,但iClonable接口是执行此操作的默认方法。您可以在MSDN库中阅读有关IClonable的内容。非常感谢您,我的问题因为您而得以解决。我决定定义自己的克隆方法。再次感谢您感谢您指出类数据在所有实例之间共享,我从来不知道这一点。我想知道(只是为了了解更多)是否有其他方法可以在不添加接口的情况下进行克隆?当然,您可以定义自己的方法来克隆对象,但iClonable接口是执行此操作的默认方法。您可以在MSDN库中阅读有关IClonable的内容。非常感谢您,我的问题因为您而得以解决。我决定定义自己的克隆方法。再次感谢你