В C # я неплохо использую LINQ и IEnumerable. И все хорошо (по крайней мере, в большинстве случаев).
Однако во многих случаях я обнаруживаю, что мне нужен пустой IEnumerable<X>
по умолчанию. То есть я бы хотел
for (var x in xs) { ... }
работать без проверки на нуль. Вот чем я сейчас занимаюсь, в зависимости от более широкого контекста:
var xs = f() ?? new X[0]; // when xs is assigned, sometimes
for (var x in xs ?? new X[0]) { ... } // inline, sometimes
Теперь, хотя все вышесказанное отлично для меня - то есть, если есть какие-то "дополнительные накладные расходы" при создании объекта массива, мне все равно - Я размышлял:
Есть ли "пустой неизменяемый синглтон IEnumerable / IList" в C # /. NET? (И даже если нет, есть ли "лучший" способ справиться с описанным выше случаем?)
В Java есть Collections.EMPTY_LIST
неизменный синглтон - "хорошо типизировано" через _ 5_, который служит этой цели, хотя я не уверен, может ли аналогичная концепция работать в C #, потому что универсальные шаблоны обрабатываются по-разному.
Спасибо.
public static class Array<T> { public static readonly T[] Empty = new T[0]; }
и его можно назвать так:Array<string>.Empty
. Я спросил об этом здесь, в CodeReview. - person Şafak Gür   schedule 15.01.2013