C# › Collections

How do you avoid multiple enumeration of an IEnumerable?

Advanced

Answer

Deferred sequences re-run their query each time you enumerate them; materialise once with ToList()/ToArray() if you iterate more than once or the source is expensive.
var q = Load().Where(x => x.Active);
var list = q.ToList(); // enumerate once
var count = list.Count; foreach (var x in list) {}
Real-world example Enumerating a database-backed IQueryable twice issues two SQL queries — materialise first.