gpt4 book ai didi

c# - new object[] {} 与 Array.Empty()
转载 作者:太空狗 更新时间:2023-10-30 00:22:45 26 4
gpt4 key购买 nike

当我输入以下代码时:

object[] objects = new object[] { };

Visual Studio 告诉我:

Avoid unnecessary zero-length allocations. Use Array.Empty<object>()instead.

使用一个而不是另一个有什么实际意义吗?

警告的原因是什么?

最佳答案

您正在创建一个空数组。它将始终为空,因为您无法更改数组实例的容量(说您无法更改其长度 听起来很奇怪,我不知道为什么)。每次执行此操作时,都会创建另一个永远无法使用的数组实例。经常这样做可能会导致 GC 浪费和内存压力,因此会出现警告。

不用创建空数组,只需使用 Array.Empty<T>()正如它所暗示的那样。此方法使用此静态类返回一个数组

internal static class EmptyArray<T>
{
public readonly static T[] Value;

static EmptyArray()
{
EmptyArray<T>.Value = new T[0];
}
}

因为它是 staticreadonly ,整个应用程序域中只有一个此空数组的实例。空数组本质上是不可变的,因此缓存实例不是问题。如果您发现自己正在注视一条创建大量空数组的优雅代码路径,它允许您放弃在算法中创建特殊外壳的空数组。

Enumerable.Empty<T>()是 Linq to Objects 的等价物,对于不浪费空东西的分配也很有用。

关于c# - new object[] {} 与 Array.Empty<object>(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53071157/

26 4 0