2

我有一个包含大量元素的列表。我需要创建此列表的副本以在不更改原始列表的情况下对其执行操作。但是,这些操作通常只访问列表的一小部分元素,因此当大部分内容都未使用时,复制整个内容是低效的。有没有一种简单的方法来创建一个作为列表克隆的对象,但只在访问元素时克隆它们?我查看了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;
}

我不介意解决方案是否不够通用,无法处理任何类型的列表;我会很好地将它特定于我创建的一两个类。

最好这将是深拷贝而不是浅拷贝,但浅拷贝仍然有用,如果它也更短/更简单,我将不胜感激。

4

1 回答 1

4

听起来您想以原始列表和稀疏的覆盖集合结束。

为什么不为覆盖创建一个字典,将索引键入原始列表?然后,您可以根据需要从原始列表中手动添加值。

您可以将此功能包装到一个类中,IList<T>如果它是您将经常使用的东西,该类将进行包装。

于 2012-10-17T07:57:26.590 回答