我有一些代码在其中返回一个对象数组。
这是一个简化的示例:
string[] GetTheStuff() {
List<string> s = null;
if( somePredicate() ) {
s = new List<string>(); // imagine we load some data or something
}
return (s == null) ?
new string[0] :
s.ToArray();
}
问题是,它有多贵new string[0]
?
我应该只返回 null 并让调用者接受 null 作为指示“未找到任何内容”的有效方式吗?
注意:这是在一个循环中调用的,它会运行数百次,所以这是我认为这种优化实际上并不“过早”的少数情况之一。
PS:即使它为时过早,我仍然想知道它是如何工作的:-)
更新:
最初,当我问它是否使用任何空间时,我是从“C/C++”的角度考虑的,有点像在 C 中,写入char a[5];
将在堆栈上分配 5 个字节的空间,char b[0];
并将分配 0 个字节。
我意识到这不适合 .NET 世界,但我很好奇这是否是编译器或 CLR 会检测和优化出来的东西,因为大小为零的不可调整大小的数组真的不应该(就我可以看到?)需要任何存储空间。