Po otrzymaniu d
możesz zajmować się ustaloną sekwencją, taką jak lista lub tablica, AST, która wyliczy niektóre zewnętrzne źródła danych, a nawet AST w niektórych istniejących kolekcjach. Czy istnieje sposób na bezpieczne "zmaterializowanie" rachunku przeliczalnego, aby operacje wyliczania takie jak foreach, liczyć itp. Nie wykonywały za każdym razem AST?Czy istnieje sposób na zapamiętanie lub zmaterializowanie IEnumerable?
Często używam .ToArray()
do tworzenia tej reprezentacji, ale jeśli podstawową pamięcią jest już lista lub inna ustalona sekwencja, która wydaje się zmarnowanym kopiowaniem. Byłoby miło, gdybym mógł zrobić
var enumerable = someEnumerable.Materialize();
if(enumberable.Any() {
foreach(var item in enumerable) {
...
}
} else {
...
}
bez obaw, że .Any()
i foreach
próbować wyliczyć sekwencję dwukrotnie i bez unccessarily kopiowanie przeliczalny.
To jest fajny pomysł, ale chciałbym zwrócić uwagę, że obecnie istniejąca biblioteka Collective.ToList ma na celu ochronę przed mutacjami w istniejącej kolekcji. – Ani
Problem z .ToList() polega na tym, że utworzy listę wyliczeń, które nie są listami (tablice, ICollections itp.) I zwrócą zmienną kolekcję. –