Есть ли синглтон «Пустой список» в C #?

В 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 #, потому что универсальные шаблоны обрабатываются по-разному.

Спасибо.

71
задан 19 December 2011 в 01:30
поделиться