ImmutableList是否具有AsReadOnly方法?

时间:2016-05-17 23:32:57

标签: c# immutable-collections

AsReadOnly()是获取集合的只读图像(与不可变集合的副本相比并不昂贵)的便捷方法。我想知道ImmutableList是否具有AsReadOnly方法?如果不是,可以采用类似的简单方法吗?

2 个答案:

答案 0 :(得分:2)

不可变集合本质上是只读的。您可以轻松签入ImmutableList<T>已实施IReadOnlyList<T>IReadOnlyCollection<T>接口的文档。

从不可变集合访问元素时未分配内存。另一方面,当您将元素添加到某些不可变数据结构时,会创建一个新的不可变集合(并使用一些内存)。许多不可改变的藏品&#39;实现不会将所有数据复制到新集合,而是与旧集合共享一些数据,因此在大多数情况下,您不应过多关注内存使用/分配时间。

某些收藏品,例如ImmutableHashSet<T>,有一份文档说明它们在内存分配数量方面进行了优化。

在不可变集合之间共享一些数据背后的想法并不复杂。维基百科有一个简单的例子(with a nice diagram),展示了如何在不可变的单链表中保存内存。

答案 1 :(得分:2)

ImmutableList<T>是通过引用复制的,因此在没有性能损失的情况下传递是绝对安全的。因此,不需要AsReadOnly方法,因为它不会使复制更容易。