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