假设我需要 C# 中
Book
类的空数组。
public class Book
{
public string Title { get; set; }
public Author Author { get; set; }
}
我找到了以下 3 个选项来实现这一目标:
new Book[0]
Array.Empty<Book>()
ArraySegment<Book>.Empty
您能建议我应该选择哪一个以及它们之间的区别吗?
Book[] arr = [];
并让编译器担心它。在幕后,这将使用
Array.Empty<Book>()
,它是 Book
类型的共享空数组。相比之下,new Book[0]
每次都会分配一个新的空数组,这是不必要的分配 - 零长度数组中不存在共享状态问题。
在大多数情况下,您会使用
Array.Empty<Book>()
。请注意,每次调用都会返回相同的实例。
new Book[0]
将产生一个新数组。这将需要分配一个新对象,但如果您希望数组与其他空数组进行不同的比较,则可以使用该新对象。
ArraySegment<Book>.Empty
不会产生数组,而是产生 ArraySegment
。 ArraySegment 通常用于表示数组的较小部分。因此,如果您想要一个空数组段,请使用它。如果您应该使用 ArraySegment 还是 Array 是一个更复杂的问题,特别是因为有多种其他集合类型可供选择。