C# 字典和数组列表的一个问题
我有一个字典,其中RFile是一个类,这个字典保存了将在listview中显示的所有数据 问题是:程序将使用从关联的listViewItem获得的键从字典中获取RFile类,然后将其添加到ArrayList中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
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的内容。非常感谢您,我的问题因为您而得以解决。我决定定义自己的克隆方法。再次感谢你