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