我有一个包含大量元素的List。我需要创建此列表的副本以对其执行操作而不更改原始列表。但是,操作通常只访问列表中的一小部分元素,因此当大部分元素未被使用时复制整个元素是低效的。有没有一种简单的方法来创建一个列表的克隆对象,但只在访问它们时克隆元素?我查看了Lazy<T>
类,这似乎是我想要的,但我不知道如何应用它。
我希望能够做到这样的事情:
LazyListCopy<SomeType> lazyCopy = LazyListCopy.Copy(myList); // No elements have been copied at this point
DoSomethingWith(lazyCopy[34]); // 35th element has now been copied
而且:
foreach(SomeType listElement in LazyCopy.Copy(myOtherList))
{
if (!Check(listElement)) // Object corresponding to listElement has been cloned
break;
}
我不介意解决方案是否不够通用,无法处理任何类型的列表;我会很好,因为它特定于我创建的一两个类。
最好是深拷贝而不是浅拷贝,但浅拷贝仍然有用,如果它更短/更简单,我会很感激。
答案 0 :(得分:4)
听起来你想要以原始列表加上稀疏的覆盖集合结束。
为什么不为重写创建一个字典,将索引键入原始列表?然后,您可以根据需要手动添加原始列表中的值。
如果你经常使用它,你可以将这个功能包装到一个包装IList<T>
的类中。