Cómo saber si un IEnumerable<T> ya fue materializado en C#
No existe una bandera HasBeenEnumerated en IEnumerable<T>. Esto es lo que TryGetNonEnumeratedCount comprueba en realidad, por qué Enumerable.Range pasa una prueba de ICollection<T> y la guarda que evita un ToList() desperdiciado.