为何ImmutableArray<T>.Builder.ItemRef(Int32)返回ref readonly而非ref引用?
为什么
ImmutableArray<T>.Builder.ItemRef(Int32)返回ref readonly而非ref? - 核心原因是强制所有元素修改都通过Builder的官方API进行,避免直接通过引用修改绕过Builder的状态管理逻辑。
ImmutableArray<T>.Builder是构建不可变数组的辅助工具,它内部需要维护版本号、元素计数等状态,确保后续生成的ImmutableArray<T>准确可靠。如果返回ref,用户可以直接修改元素的内存值,Builder无法感知这类操作,会导致内部状态和实际数组内容不一致,最终生成的不可变数组可能不符合预期。ref readonly只允许读取元素值,要修改元素必须使用Builder的可写索引器(builder[index] = newValue)这类API,这样Builder能在修改时同步更新自身状态,保证整个构建过程的一致性。- 你提到的调整大小替换后备数组确实会让之前的引用失效,但这是另一个独立问题,和返回
ref readonly的设计目的无关——这个设计的核心是管控修改路径,而非解决引用失效问题。
内容的提问来源于stack exchange,提问作者Simon W
相关产品推荐
相关产品推荐

