В С# я использую 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" singleton в С#/. NET? (И, даже если нет, есть ли "лучший" способ справиться с описанным выше случаем?)
Java имеет Collections.EMPTY_LIST
неизменяемый синглтон - "хорошо типизированный" через Collections.emptyList<T>()
- который служит этой цели, хотя я не уверен, что аналогичная концепция может работать даже на С#, поскольку дженерики обрабатываются по-разному.
Спасибо.