在C#中,有没有办法直接从数组创建List而不复制?

Jam*_*oux -3 c# arrays list

C#是否提供了一种直接从数组创建列表而无需逐个复制元素的方法?

我知道,引擎盖下的列表只是维护一个数组,所以从一个数组开始并使一个新的列表只是在内部指向数组似乎很自然.将数组转换为List时,这样做的好处是可以获得巨大的性能提升.

在c#中有没有本地方法呢?如果没有,是否有人有扩展方法或库来执行此操作?

彼得要求量化"表现上的巨大收益". 所以这里是基于我对List构造函数如何工作的理解:

List()包含三个重载.其中一个重载将IEnumerable作为输入.此重载通过声明一个非常小的新列表来工作(除非它在更新的c#版本中已更改,历史默认大小为0,然后在首次添加元素时初始化为4).

每次将一个元素添加到列表中时,如果新元素超出容量,则通过创建一个全新的数组并将元素逐个复制到新数组,将数组大小加倍.这样做的结果是,从IEnumerable构建List的成本是O(n)PLUS所发生的所有阵列副本的成本.重点是,它不小.

对于IEnumerable,List()构造必须以这种方式工作,因为IEnumerable的大小未知.如果您从数组中创建List,您将知道创建时的确切大小,这意味着成本应为O(1).

Joe*_*orn 5

不,因为List对象需要能够依靠控制数组.如果您对List之外的数组有引用,则会失去该保证.