.NET中是否存在兼具不可变与只读特性的集合类型?
.NET 只读与不可变集合的差异及需求探讨
.NET 中同时存在只读和不可变两类集合类型,具体差异如下:
ReadOnlyCollection<T>:作为普通列表的只读包装器,客户端无法直接修改该类型的实例(具备只读特性),但如果底层被包装的列表发生变更,这些变化会同步反映到ReadOnlyCollection<T>实例上,因此它不具备不可变性。ImmutableList<T>:属于不可变类型——实例一旦创建,就无法通过修改对象状态来改变它。但它的公共接口并非完全只读:客户端可以调用Add这类方法,不过这类方法不会修改当前实例,而是返回一个包含新内容的全新实例。
我需要一种同时具备不可变与只读特性的具体类型,但目前没在.NET基类库中找到现成的实现,是不是我遗漏了什么?
目前最接近的实现方式是借助只读接口,示例代码如下:
public IReadOnlyCollection<string> GetItems() { // 返回的集合是不可变对象,客户端仅能以只读方式访问 return new List<string> { "foo", "bar" }.ToImmutableList(); }
内容的提问来源于stack exchange,提问作者Enrico Massone
相关产品推荐
相关产品推荐

