У 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 #, оскільки з генериками поводиться по-різному.
Дякую.