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

如何创建包含指定值的IReadOnlyList<string>?

创建带初始值的IReadOnlyList的正确方法

嘿,我明白你遇到的困扰了——直接给IReadOnlyList<string>加元素不行,用ReadOnlyCollection的方式也没达到预期对吧?别担心,这里有几种靠谱的方法能帮你创建包含初始值的只读列表:

方法1:用List的AsReadOnly()包装

这是最常用的方式,先创建一个带初始值的List<string>,再把它转换成只读包装:

// 先构建包含初始值的可变列表
var mutableList = new List<string> { "Dog", "Cat", "Bird" };
// 转换为IReadOnlyList<string>
IReadOnlyList<string> readOnlyList = mutableList.AsReadOnly();

⚠️ 注意:这种方式的只读列表是原列表的包装,如果后续修改了mutableList,readOnlyList的内容也会跟着变。如果你需要完全不可变的集合,看下面的方法。

方法2:使用ImmutableArray(完全不可变)

如果你想要一个一旦创建就不能被修改的集合,ImmutableArray是最佳选择,它天然实现了IReadOnlyList<T>:

// 直接创建带初始值的不可变数组
IReadOnlyList<string> readOnlyList = ImmutableArray.Create("Red", "Green", "Blue");

这种方式下,集合的内容完全固定,不管是外部还是内部都没法修改,非常适合需要稳定数据的场景。

方法3:直接用数组

数组本身就实现了IReadOnlyList<T>,所以你可以直接声明一个数组并赋值:

// 数组天然支持IReadOnlyList<string>
IReadOnlyList<string> readOnlyList = new string[] { "Monday", "Tuesday", "Wednesday" };

虽然数组可以通过索引修改元素,但当你把它当作IReadOnlyList<string>暴露时,调用方没法调用添加/删除等修改集合结构的方法。对于字符串这种不可变类型来说,这已经足够安全了。

为什么你之前的尝试没成功?

  • 直接给IReadOnlyList<string>加元素:因为IReadOnlyList接口只定义了只读访问的方法/属性(比如Count、索引器),根本没有Add方法,所以自然没法直接添加。
  • 用ReadOnlyCollection但无效:大概率是你没先创建一个包含初始值的可变集合就直接用了——ReadOnlyCollection需要包装一个已有的集合,不能凭空创建带初始值的实例。

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:21:39