You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 03:12:18