c# - 如果我将数组的大小初始化为 0 会发生什么?

标签 c# arrays

假设我有一个函数:

void myFunc(List<AClass> theList)
{
   string[] stuff = new string[theList.Count];
}

然后我传入一个空列表。

东西会是空指针吗?还是指向内存中某个未初始化的随机位置的指针?

最佳答案

它将创建一个空数组对象。这仍然是一个完全有效的对象 - 并且在内存中占用非零空间。它仍然会知道自己的类型和计数 - 它只是不会有任何元素。

空数组通常可用作不可变的空集合:您可以无限次重复使用它们;数组本质上是可变的,但仅在它们的元素方面......在这里我们没有元素可以改变!由于数组不可调整大小,因此空数组与 .NET 中的对象一样不可变。

请注意,使用空数组而不是空引用通常很有用:返回集合的方法或属性应该几乎总是返回空集合而不是空引用,因为它提供了一致性和统一性- 而不是让每个 调用者检查无效性。如果你想避免多次分配,你可以使用:

public static class Arrays<T>
{
    private static readonly T[] empty = new T[0];

    public static readonly T[] Empty { get { return empty; } }
}

然后你就可以使用:

return Arrays<string>.Empty;

(或其他)当您需要使用对特定类型的空数组的引用时。

关于c# - 如果我将数组的大小初始化为 0 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3102353/

相关文章:

c# - 从 Entity Framework .NET 返回父子的多个孙子

javascript - 通过子数组的聚合和排序来展平多维数组

c - 当我只能定义一个可变长度数组时,为什么要使用 malloc()?

c# - 如何将 CanExecute 与 Mvvmcross 一起使用

c# - 如何在 C# 中检索 azure blob 存储文件属性,例如创建数据和审核跟踪

c# - UserControl 集合未标记为可序列化

Java:数组的工作原理

JavaScript 取消移动每个数组元素

javascript - 可以将数字或数字数组作为参数并返回字符串或字符串数​​组的函数

c# - 使用 SIMD 查找 Span<ushort> 中是否存在 'ushort' 的最快方法?