Что лучше, Enumerable.Empty <T> или new [0]?

Это одно и то же:

IEnumerable<string> i;
i = Enumerable.Empty<string>();
i = new string[0];

Итак, что использовать?

Я думаю, что первое сообщение намерено более четко, но оно больше и немного шумнее, не говоря уже о уродливости в отладчике. Второй также более эффективен в памяти и процессоре, если я правильно читаю Reflector.

Я склоняюсь к new type[0], но хочу знать, что вы все думаете.

Ответ 1

Enumerable.Empty<T> кэширует создание пустого массива, поэтому тот же массив всегда будет возвращен, а второй оператор создает новый массив с каждым вызовом.

Я бы склонен к Enumerable.Empty<T>, поскольку он более четко показывает намерение программиста, а также потому, что использование явного создания массива из-за использования памяти является преждевременной оптимизацией в управляемой программе, поскольку среда выполнения почти всегда выделяет больше чем необходимая память для этого процесса.

Ответ 2

Разница в показателях производительности/использования памяти невероятно ничтожно мала в этой ситуации, так что это не было бы решающим фактором.

Я лично использовал бы Enumerable.Empty, главным образом потому, что он очень четко описывает намерение разработчика.

Ответ 3

Мне кажется, что Enumerable.Empty делегирует EmptyEnumerable, который возвращает массив длины 0. Но он возвращает один и тот же каждый раз и сохраняет этот пустой массив навсегда.