Почему этот запрос LINQ не выполняется при использовании foreach?

При создании новых объектов в операторе LINQ, например:

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

С классом А выглядит так:

class A
{
    public string Label;
}

И затем изменение свойств в A с помощью цикла foreach:

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

Почему значения не установлены при доступе к объектам вIEnumerable после этого. Например. следующее утверждение не выполняется:

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

Интересно, почему это происходит? Я ожидаю, что оператор foreach выполнит запрос и инициирует создание объектов. Документация MSDN гласит:Выполнение запроса откладывается до тех пор, пока переменная запроса не будет повторена в цикле foreach или For Each ».

Я воспроизвел это поведение с .NET 4.5 и Mono 3.2.0. призваниеToList наIEnumerable прежде чем получить доступ к созданному объекту, проблема исчезнет.

Ответы на вопрос(1)

Ваш ответ на вопрос