¿Por qué no se ejecuta esta consulta LINQ cuando se usa foreach?

Al crear nuevos objetos en una declaración LINQ, por ejemplo:

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

Con la clase A luciendo así:

class A
{
    public string Label;
}

Y luego modificando las propiedades en A con un bucle foreach:

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

¿Por qué no se establecen los valores al acceder a los objetos en elIEnumerable después. P.ej. la siguiente afirmación falla:

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

Me pregunto por qué sucede esto. Espero que la instrucción foreach ejecute la consulta y desencadene la creación de los objetos. Estados de documentación de MSDN:"La ejecución de la consulta se aplaza hasta que la variable de consulta se repite en un bucle foreach o For Each".

He reproducido este comportamiento con .NET 4.5 y Mono 3.2.0. VocaciónToList sobre elIEnumerable antes de acceder al objeto creado hace que este problema desaparezca.

Respuestas a la pregunta(1)

Su respuesta a la pregunta