Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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#_.net - Fatal编程技术网

C# 复制引用本身?

C# 复制引用本身?,c#,.net,C#,.net,有没有办法让我复制一个引用本身?例如,我在表单上添加了一个ListView控件,我希望持久化它的Items集合,即 ListViewItemCollection lvic = ListView.Items(); 当我调用ListView.Items.Clear()时,lvic不应该被清除。简单的尝试方法 ListViewItem[] items = new ListViewItem[listView1.Items.Count]; listView1.Items.CopyTo(items

有没有办法让我复制一个引用本身?例如,我在表单上添加了一个ListView控件,我希望持久化它的Items集合,即

ListViewItemCollection lvic = ListView.Items();
当我调用ListView.Items.Clear()时,lvic不应该被清除。

简单的尝试方法

  ListViewItem[] items = new ListViewItem[listView1.Items.Count];
  listView1.Items.CopyTo(items, 0);

您需要创建对象的克隆,您可以查看这篇讨论对象克隆的帖子:

本文讨论了两种类型的克隆

1. Deep Cloning
2. Shallow Copy

克隆/复制是一个广泛的主题。这取决于具体情况。在您的情况下,您可以简单地使用Linq创建集合的副本

ListViewItem[] copiedItems = ListView.Items().OfType<ListViewItem>().ToArray();
ListViewItem[]copiedItems=ListView.Items().of type().ToArray();

在这种情况下,请小心克隆。无法将ListViewItemCollection的实例分配给ListView,并且ListView或ListViewItem的副本仍然使用一些本机资源(在winforms和wpf世界中),因此,如果使用错误,复制将导致严重的错误

您已经在用该语句复制引用了。我想您要复制的是被引用的集合,而不是引用本身。我只需要保留Items集合,以便在清除集合后可以访问它。然后复制集合的Items。LOL,浅克隆而不是阴影