AsReadOnly()是获取集合的只读图像(与不可变集合的副本相比并不昂贵)的便捷方法。我想知道ImmutableList是否具有AsReadOnly方法?如果不是,可以采用类似的简单方法吗?
答案 0 :(得分:2)
不可变集合本质上是只读的。您可以轻松签入ImmutableList<T>
已实施IReadOnlyList<T>
和IReadOnlyCollection<T>
接口的文档。
从不可变集合访问元素时未分配内存。另一方面,当您将元素添加到某些不可变数据结构时,会创建一个新的不可变集合(并使用一些内存)。许多不可改变的藏品&#39;实现不会将所有数据复制到新集合,而是与旧集合共享一些数据,因此在大多数情况下,您不应过多关注内存使用/分配时间。
某些收藏品,例如ImmutableHashSet<T>
,有一份文档说明它们在内存分配数量方面进行了优化。
在不可变集合之间共享一些数据背后的想法并不复杂。维基百科有一个简单的例子(with a nice diagram),展示了如何在不可变的单链表中保存内存。
答案 1 :(得分:2)
ImmutableList<T>
是通过引用复制的,因此在没有性能损失的情况下传递是绝对安全的。因此,不需要AsReadOnly
方法,因为它不会使复制更容易。