W C # dobrze używam LINQ i IEnumerable. I wszystko jest w porządku (a przynajmniej w większości).
Jednak w wielu przypadkach okazuje się, że IEnumerable<X>
domyślnie potrzebuję pustego . To znaczy chciałbym
for (var x in xs) { ... }
do pracy bez konieczności sprawdzania zerowej wartości. Teraz robię to, w zależności od szerszego kontekstu:
var xs = f() ?? new X[0]; // when xs is assigned, sometimes
for (var x in xs ?? new X[0]) { ... } // inline, sometimes
Teraz, podczas gdy powyższe jest dla mnie w porządku - to znaczy, jeśli jest jakiś „dodatkowy narzut” związany z tworzeniem obiektu tablicy, po prostu nie obchodzi mnie to - zastanawiałem się:
Czy istnieje singleton „pusty niezmienny IEnumerable / IList” w C # / .NET? (A nawet jeśli nie, czy istnieje „lepszy” sposób rozwiązania opisanego powyżej przypadku?)
Java ma Collections.EMPTY_LIST
niezmienny singleton - „dobrze wpisany” via Collections.emptyList<T>()
- który służy temu celowi, chociaż nie jestem pewien, czy podobna koncepcja mogłaby działać nawet w C #, ponieważ typy generyczne są obsługiwane inaczej.
Dzięki.