假设我有一个函数:
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/