假设我需要 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
您能建议我应该选择哪一个以及它们之间的区别吗?
在大多数情况下,您会使用
Array.Empty<Book>()
。请注意,每次调用都会返回相同的实例。
new Book[0]
将产生一个新数组。这将需要分配一个新对象,但如果您希望数组与其他空数组进行不同的比较,则可以使用该新对象。
ArraySegment<Book>.Empty
不会产生数组,而是产生 ArraySegment
。 ArraySegment 通常用于表示数组的较小部分。因此,如果您想要一个空数组段,请使用它。如果您应该使用 ArraySegment 还是 Array 是一个更复杂的问题,特别是因为有多种其他集合类型可供选择。
new Book[0]
每次都会创建一个新实例。
Array.Empty<Book>()
将在当前实现下重用单例实例(尽管这是未记录),因此经常使用时可能会更高效。
ArraySegment<Book>.Empty.Array
不是惯用语,所以应该避免。