C#中获取Book类空数组的最优方式及三种实现差异解析
C#中Book类空数组的实现选择与差异分析
首先明确Book类的定义:
public class Book { public string Title { get; set; } public Author Author { get; set; } }
推荐选择
优先使用 Array.Empty<Book>();如果项目基于.NET Framework 4.6之前的老版本,选择 new Book[0];绝对不要用 ArraySegment<Book>.Empty 来获取空数组,它的设计用途和类型都不匹配这个场景。
三种实现方式的差异
1. new Book[0]
- 每次调用都会创建一个全新的空
Book[]实例,虽然空数组占用内存极小,但高频调用下会产生微小的额外内存开销。 - 语法直观,兼容所有C#版本,适合老框架项目。
2. Array.Empty<Book>()
- 这是.NET官方推荐的写法,从.NET Framework 4.6、.NET Core 1.0开始引入。
- 内部维护了一个共享的静态空数组实例,所有调用该方法的地方都会复用同一个实例,完全没有重复创建对象的开销,性能更优。
- 代码语义清晰,直接表达“获取一个空的Book数组”的意图。
3. ArraySegment<Book>.Empty
- 它的类型是
ArraySegment<Book>,而非Book[],本身是对数组的分段包装器,不是数组本身。 - 虽然可以通过
ArraySegment<Book>.Empty.Array拿到空数组,但这属于误用——ArraySegment<T>的设计目的是用来表示现有数组的一段连续区域,不是用来生成空数组的,这么写会让代码意图混淆,还多了一次属性访问的步骤。
内容的提问来源于stack exchange,提问作者Pavel Foltyn
相关产品推荐
相关产品推荐

