Por que IEumerator <T> afeta o estado de IEnumerable <T> até mesmo o enumerador nunca chegou ao fim?

Estou curioso porque o seguinte lança uma mensagem de erro (exceção fechada do leitor de texto) na "última" atribuição:

IEnumerable<string> textRows = File.ReadLines(sourceTextFileName);
IEnumerator<string> textEnumerator = textRows.GetEnumerator();

string first = textRows.First();
string last = textRows.Last();

No entanto, o seguinte executa bem:

IEnumerable<string> textRows = File.ReadLines(sourceTextFileName);

string first = textRows.First();
string last = textRows.Last();

IEnumerator<string> textEnumerator = textRows.GetEnumerator();

Qual é a razão para o comportamento diferente?

questionAnswers(1)

yourAnswerToTheQuestion