【发布时间】:2011-01-09 04:04:09
【问题描述】:
我遇到了极不可能的原始情况,即想从我的财产中返回一个只读数组。到目前为止,我只知道一种方法——通过System.Collections.ObjectModel.ReadOnlyCollection<T>。但这对我来说似乎有点尴尬,更不用说这个类失去了通过索引访问数组元素的能力(补充说:哎呀,我错过了索引器)。没有更好的办法吗?可以使数组本身不可变的东西?
【问题讨论】:
-
ReadOnlyCollection 有一个索引器,它支持索引。你不能使数组不可变。
-
其实,ReadOnlyCollection
确实有一个 indexer 属性... -
@BFree - 但(重要的是)它不会让您通过索引器成功重新分配项目
-
@nobugz - 当然可以:
new string[0]- 很多不可变的;-p -
两点:(1)我们正在考虑为未来的C#版本使用不可变数组,但这很棘手;如果无法更改数组的内容,如何初始化数组?我们正在努力,但没有承诺,这只是在构思阶段。并且(2)不要忘记只读集合只是可变对象的不可变外观;如果其他人对底层对象进行了变异,外观将暴露变异。