如何以最佳实践的方式手动迭代(即一次一个,使用“下一个”按钮)XDocument中一组XElements?假设我是这样选择所需元素集:
var elems = from XElement el in m_xDoc.Descendants()
where (el.Name.LocalName.ToString() == "q_a")
select el;
我可以使用IEnumerator来迭代它们,即IEnumerator m_iter; 但是当我到达结尾并且想要从头开始时,如果在其上调用Reset(),它会抛出NotSupportedException。这是因为,正如Microsoft C# 2.0规范中的第22章“迭代器”所述:“请注意,枚举器对象不支持IEnumerator.Reset方法。调用此方法会导致抛出System.NotSupportedException。”那么正确的做法是什么呢?如果我还想进行双向迭代,即还要有一个“后退”按钮,该怎么办呢?
Microsoft讨论论坛上的某个人说我根本不应该直接使用IEnumerable。他说有一种使用LINQ实现我想要的方式,但我不明白是什么。还有人建议使用ToList()将XElements转储到列表中,我认为这可能有效,但我不确定它是否是“最佳实践”。感谢您提前提供任何建议!
foreach
循环不是 OP 在寻找的。他想要只在用户按下按钮时获取下一个元素。我认为最好将数据存储到列表中。 - Philip Daubmeier