Por que essa consulta LINQ não é executada ao usar foreach?

Ao criar novos objetos em uma instrução LINQ, por exemplo:

var list = new List<string>() { "a", "b", "c" };
var created = from i in list select new A();

Com a classe A assim:

class A
{
    public string Label;
}

E então modificando propriedades em A com um loop foreach:

foreach (var c in created) {
    c.Label = "Set";
}

Por que os valores não são definidos ao acessar os objetos noIEnumerable&nbsp;depois. Por exemplo. a seguinte afirmação falha:

Assert.AreEqual("Set", created.ElementAt(2).Label);

Eu me pergunto por que isso acontece. Eu esperaria que a instrução foreach executasse a consulta e acionasse a criação dos objetos. A documentação do MSDN indica:"A execução da consulta é adiada até que a variável de consulta seja iterada em um loop foreach ou For Each".

Eu reproduzi esse comportamento com o .NET 4.5 e o Mono 3.2.0. ChamandoToList&nbsp;noIEnumerable&nbsp;antes de acessar o objeto criado, esse problema desaparece.