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