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