假设我的功能如下:
void myFunc(List<AClass> theList)
{
string[] stuff = new string[theList.Count];
}
Run Code Online (Sandbox Code Playgroud)
我传了一个空列表.
东西会是空指针吗?或者它是一个指向未初始化的内存中某个随机位置的指针?
Jon*_*eet 90
它将创建一个空数组对象.这仍然是一个完全有效的对象 - 并且在内存中占用非零空间.它仍然会知道它自己的类型和计数 - 它只是没有任何元素.
空数组通常可用作不可变的空集合:您可以无限制地重复使用它们; 数组本质上是可变的,但仅限于它们的元素 ......在这里我们没有要改变的元素!由于数组不可调整大小,因此空数组完全不可变.
请注意,拥有一个空数组而不是空引用通常很有用:返回集合的方法或属性几乎总是返回一个空集合而不是空引用,因为它提供了一致性和一致性 - 而不是让每个调用者检查无效.如果您想避免多次分配,可以使用:
public static class Arrays<T>
{
private static readonly T[] empty = new T[0];
public static readonly T[] Empty { get { return empty; } }
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用:
return Arrays<string>.Empty;
Run Code Online (Sandbox Code Playgroud)
(或者其他什么)当你需要使用对特定类型的空数组的引用时.
Jan*_*net 12
为什么要这样?它只会指向一个大小为0的数组,这是完全有效的.
我认为这里的混淆来自于通过大小为0的数组或设置为null的变量来表示数据缺失的模糊性(对于具有空字符串或字符串引用设置为null的字符串存在相同的歧义).两者都是表明这种缺席的有效方式,只有一个可以说更有意义.因此,在某些数据库(特别是Oracle)上,空字符串等于NULL值,反之亦然,一些编程语言(我认为,新版本的C#就是其中之一)允许指定永远不为空的引用,也消除了这种歧义.