使用vs而不使用LINQ查询运算符时,从XML中枚举元素而不进行过滤

时间:2014-12-19 05:19:31

标签: c# xml linq

在XElement.Elements(XName)方法的MSDN文档中,有以下示例:

XElement xmlTree = new XElement("Root",
    new XElement("Type1", 1),
    new XElement("Type1", 2),
    new XElement("Type2", 3),
    new XElement("Type2", 4),
    new XElement("Type2", 5)
);

IEnumerable<XElement> elements =
    from el in xmlTree.Elements("Type2")
    select el;
foreach (XElement el in elements)
    Console.WriteLine(el);

它和以下之间是否存在差异,产生相同的结果?

foreach (XElement el in xmlTree.Elements("Type2"))
    Console.WriteLine(el);

在这里使用查询运算符是否有原因?

2 个答案:

答案 0 :(得分:1)

在这种情况下,两者之间没有区别。我相信文档只是试图证明查询XML结构的能力。这种查询语法允许更详细和更具表现力的结果。

如果你担心看起来像多次枚举值的可能性你可以轻松休息,因为IEnumerable在被消耗时被评估(每个循环),所以在幕后不会发生任何额外的工作

答案 1 :(得分:0)

这篇文章实际上对Linq和Foreach之间的区别有一些很好的答案。最佳答案还包括一篇非常有用的博文:https://codereview.stackexchange.com/questions/14197/is-the-linq-version-faster-than-the-foreach-one