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

为何Array没有AsReadOnly实例方法,而List却具备该方法?

这确实是个有意思的细节——List和Array在创建只读集合的方式上存在明显差异,咱们来拆解一下:

List 的 AsReadOnly() 实例方法

List 提供了实例方法 AsReadOnly(),用法非常直观:

var list = new List<int>();
var readOnlyList = list.AsReadOnly();

它的实现逻辑很简单,就是把当前List实例包装成ReadOnlyCollection返回:

public ReadOnlyCollection<T> AsReadOnly() 
{ 
    return new ReadOnlyCollection<T>((IList<T>) this); 
}

Array 的 AsReadOnly<T>() 静态方法

反观数组(Array),它并没有对应的实例方法,只能通过静态方法 Array.AsReadOnly<T>() 来创建只读包装:

var array = new int[] { };
var readOnlyArray = Array.AsReadOnly(array);

它的实现思路和List版本类似,但额外增加了null检查逻辑:

public static ReadOnlyCollection<T> AsReadOnly<T>(T[] array) 
{ 
    if (array == null) 
        throw new ArgumentNullException(nameof(array));
    return new ReadOnlyCollection<T>(array); 
}

简单来说,List作为专门设计的集合类,把创建只读视图的逻辑封装成了实例方法;而数组是CLR层面的特殊类型,只能通过静态方法提供这个能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:07:25