У меня есть код, в котором я возвращаю массив объектов.
Здесь приведен упрощенный пример:
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 как действительный способ указания "ничего не найдено"?
NB: Это вызывается в цикле, который запускается сотни и сотни раз, поэтому это один из немногих случаев, когда я думаю, что такое оптимизация не является преждевременным.
PS: И даже если это было преждевременно, мне все равно хотелось бы знать, как это работает: -)
Обновление:
Изначально, когда я спросил, использует ли оно какое-либо пространство, я думал о вещах с точки зрения "C/С++", вроде как в C, пишу char a[5];
выделяет 5 байтов пространства в стеке, и char b[0];
будет выделять 0 байт.
Я понимаю, что это не очень хорошо подходит для .NET-мира, но мне было любопытно, было ли это что-то, что компилятор или CLR обнаружил бы и оптимизировал бы, так как не изменяемый размер массива нулевого размера действительно не должен ( насколько я могу видеть?) требуется любое место для хранения.