Como saber se um IEnumerable<T> já foi materializado em C#
Não existe uma flag HasBeenEnumerated em IEnumerable<T>. Veja o que TryGetNonEnumeratedCount realmente verifica, por que Enumerable.Range passa em um teste de ICollection<T> e a guarda que evita um ToList() desperdiçado.