当我输入以下代码时:
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];
}
}
因为它是 static
和 readonly
,整个应用程序域中只有一个此空数组的实例。空数组本质上是不可变的,因此缓存实例不是问题。如果您发现自己正在注视一条创建大量空数组的优雅代码路径,它允许您放弃在算法中创建特殊外壳的空数组。
Enumerable.Empty<T>()
是 Linq to Objects 的等价物,对于不浪费空东西的分配也很有用。
关于c# - new object[] {} 与 Array.Empty<object>(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53071157/