【发布时间】:2016-03-30 14:24:03
【问题描述】:
背景:我有一个直接链接到 WPF 中的 UI 的对象列表。我需要对这些对象做一些工作,但是当我(异步)使用它们时,我不希望对 UI 进行任何刷新(性能和美学原因)。
所以我想,我可以复制这些项目(使用Collection<T>.CopyTo(T[] array, int index)),处理副本,然后用复制的列表覆盖我的原始列表。问题是,即使这样,引用也会被保留,并且 UI 会不断刷新。
我所做的代码示例:
MyUIObject[] myCopiedList = new MyUIObject[MyObjectsLinkedToTheUI.Count];
MyObjectsLinkedToTheUI.CopyTo(myCopiedList);
foreach (MyUIObject myCopiedItem in myCopiedList)
{
//while I do this, the UI is still updated
PerformLongAndWearyOperationAsync(myCopiedItem);
}
MyObjectsLinkedToTheUI.Clear();
foreach (var myCopiedItem in myCopiedList)
{
MyObjectsLinkedToTheUI.Add(myCopiedItem);
}
是否有可能在不保留对原始对象的引用的情况下复制我的项目?
更新 1
感谢您迄今为止所做的贡献。我忘了提一件事:这是针对 Windows Phone 8.1 的,因此 ICloneable 不可用。
【问题讨论】:
-
您需要“克隆”它们 - 创建新对象并复制属性,如果您想要“深拷贝”,还可以克隆任何引用类型。搜索“克隆”“浅拷贝”和“深拷贝”,您会找到满足您需求的内容。
标签: c# windows-phone-8.1