在C#中获取空数组在时间和空间方面最有效的方法是什么? [已关闭]

问题描述 投票:0回答:2

假设我需要 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

您能建议我应该选择哪一个以及它们之间的区别吗?

c# arrays generics collections
2个回答
4
投票
Book[] arr = [];

并让编译器担心它。在幕后,这将使用

Array.Empty<Book>()
,它是
Book
类型的共享空数组。相比之下,
new Book[0]
每次都会分配一个新的空数组,这是不必要的分配 - 零长度数组中不存在共享状态问题。


2
投票

在大多数情况下,您会使用

Array.Empty<Book>()
。请注意,每次调用都会返回相同的实例。

new Book[0]
将产生一个新数组。这将需要分配一个新对象,但如果您希望数组与其他空数组进行不同的比较,则可以使用该新对象。

ArraySegment<Book>.Empty
不会产生数组,而是产生
ArraySegment
。 ArraySegment 通常用于表示数组的较小部分。因此,如果您想要一个空数组段,请使用它。如果您应该使用 ArraySegment 还是 Array 是一个更复杂的问题,特别是因为有多种其他集合类型可供选择。

© www.soinside.com 2019 - 2024. All rights reserved.