我有一个包含大量元素的列表。我需要创建此列表的副本以在不更改原始列表的情况下对其执行操作。但是,这些操作通常只访问列表的一小部分元素,因此当大部分内容都未使用时,复制整个内容是低效的。有没有一种简单的方法来创建一个作为列表克隆的对象,但只在访问元素时克隆它们?我查看了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;
}
我不介意解决方案是否不够通用,无法处理任何类型的列表;我会很好地将它特定于我创建的一两个类。
最好这将是深拷贝而不是浅拷贝,但浅拷贝仍然有用,如果它也更短/更简单,我将不胜感激。