Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ImmutableList是否有类似AsReadOnly的方法?_C#_Immutable Collections - Fatal编程技术网

C# ImmutableList是否有类似AsReadOnly的方法?

C# ImmutableList是否有类似AsReadOnly的方法?,c#,immutable-collections,C#,Immutable Collections,AsReadOnly()是一种方便的方法,用于获取集合的只读映像(与不可变集合的副本相比并不昂贵)。我想知道ImmutableList是否有类似AsReadOnly的方法?如果没有,那么有什么简单的方法可以实现类似的功能吗?不可变集合本质上是只读的。您可以轻松地签入已经实现了IReadOnlyList和IReadOnlyCollection接口的文档 当您从不可变集合访问元素时,不会分配内存。另一方面,当您将一个元素添加到某个不可变的数据结构中时,将创建一个新的不可变集合(并使用一些内存)。许多

AsReadOnly()是一种方便的方法,用于获取集合的只读映像(与不可变集合的副本相比并不昂贵)。我想知道ImmutableList是否有类似AsReadOnly的方法?如果没有,那么有什么简单的方法可以实现类似的功能吗?

不可变集合本质上是只读的。您可以轻松地签入已经实现了
IReadOnlyList
IReadOnlyCollection
接口的文档

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

例如,有些集合有一个文档,其中说明它们在内存分配数量方面得到了优化


在不可变集合之间共享某些数据的想法并不复杂。维基百科有一个简单的例子,展示了在不可变的单链表的情况下如何节省内存

ImmutableList
是通过引用复制的,因此完全可以安全地传递,而不会造成性能损失。因此,没有必要使用
AsReadOnly
方法,因为它不会使复制变得更容易。

不可变这个词对您来说意味着什么?不可变列表已经是只读的,您为什么想要这样的方法?@DavidG我认为只读映像可能有更好的性能。对于不可变列表,每次我访问它,都会得到一份昂贵的副本。如果我错了,请纠正我。只有在修改后才能获得副本。@user1899020否,访问元素不会复制不可变集合。如果您修改它,如果我将不可变列表作为公共自动实现属性,则将创建一个新实例(但某些不可变数据结构共享“公共”数据,因此内存开销通常不像许多人期望的那么大)。当我使用getter访问它时。它是一个昂贵的副本还是仅仅是一个引用?这是一个引用-它的工作原理与其他任何引用类型一样。