为什么IEnumerable中没有赋值?

时间:2013-04-02 09:24:07

标签: c# linq-to-xml

我解析了一些数据

var result = xml.Descendants("record").Select(x => new F130Account
    {
        Account = x.Descendants("Account").First().Value,
    });

然后我尝试更新

foreach (var item in result)
    item.Quantity = 1;

在此之后我result.Sum(a => a.Quantity)为零......为什么?

1 个答案:

答案 0 :(得分:5)

这是因为每次开始枚举时都会再次评估result集合,因此Sum会在新的F130Account个对象上运行,而不是foreach循环。这就是LINQ和懒惰的方式。

首先将结果初始化为List<F130Account>

var result = xml.Descendants("record").Select(x => new F130Account
    {
        Account = x.Descendants("Account").First().Value,
    }).ToList();

之后,foreachSum都将在同一个对象集合上运行。