Как понять, что IEnumerable<T> в C# уже материализован
У IEnumerable<T> нет флага HasBeenEnumerated. Разбираем, что на самом деле проверяет TryGetNonEnumeratedCount, почему Enumerable.Range проходит проверку на ICollection<T> и какая проверка спасает от лишнего ToList().