ImmutableArray Builder为何触发意外IndexOutOfRangeException?
ImmutableArray.Builder设置指定索引元素抛出IndexOutOfRange异常
以下代码会抛出IndexOutOfRange异常:
var builder = ImmutableArray.CreateBuilder<Color>(5); builder[3] = Colors.Red;
依据官方文档描述,我原本认为这段代码应该可行:
ImmutableArray<T>.CreateBuilder<T>(Int32)创建可转换为ImmutableArray且无需分配新内存的可变数组;Int32 = 构建器的初始容量,返回Builder
Builder类:可转换为ImmutableArray实例且无需额外分配内存的可写数组访问器。
Builder[int32]获取或设置指定索引处的元素。
文档中没有任何内容表明这种用法存在问题,但普通数组的相同逻辑却能正常运行:
var colors = new Color[5]; colors[3] = Colors.Red;
我原本期望Builder能提供和普通可变数组一致的行为,但实际并非如此。
在我的应用场景中,索引作为键,我需要像操作普通数组一样设置指定索引处的元素。
补充说明
以下代码可以实现需求,但会产生额外内存分配开销:
var arr = new Color[5]; arr[3] = Colors.Red; var array = arr.ToImmutableArray();
而直接使用Builder的方式依然会抛出异常:
var builder = ImmutableArray.CreateBuilder<Color>(5); builder[3] = Colors.Red; var array = builder.ToImmutable();
内容的提问来源于stack exchange,提问作者NWoodsman
相关产品推荐
相关产品推荐

