Warum wird diese LINQ-Abfrage bei Verwendung von foreach nicht ausgeführt?

Beim Erstellen neuer Objekte in einer LINQ-Anweisung, zum Beispiel:

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

Wenn Klasse A so aussieht:

class A
{
    public string Label;
}

Und dann Eigenschaften in A mit einer foreach-Schleife ändern:

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

Warum werden die Werte beim Zugriff auf die Objekte im nicht gesetzt?IEnumerable&nbsp;danach. Z.B. Die folgende Behauptung schlägt fehl:

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

Ich frage mich, warum das passiert. Ich würde erwarten, dass die foreach-Anweisung die Abfrage ausführt und die Erstellung der Objekte auslöst. MSDN-Dokumentation besagt:"Die Ausführung der Abfrage wird verzögert, bis die Abfragevariable in einer foreach- oder For Each-Schleife durchlaufen wird.".

Ich habe dieses Verhalten mit .NET 4.5 und Mono 3.2.0 reproduziert. BerufungToList&nbsp;auf derIEnumerable&nbsp;vor dem Zugriff auf das erstellte Objekt lässt sich dieses Problem beheben.