7
如何使用C#执行以下C++代码片段的等效代码LinkedList
?如何以相反顺序遍历C#LinkedList
std::list<MyClass*>::reverse_iterator itr(it);
for(; itr != MyList.rend(); ++itr)
如何使用C#执行以下C++代码片段的等效代码LinkedList
?如何以相反顺序遍历C#LinkedList
std::list<MyClass*>::reverse_iterator itr(it);
for(; itr != MyList.rend(); ++itr)
作为1客,是这样的:
var el = list.Last;
while (el != null) {
// use el.Value
el = el.Previous;
}
如果你经常这样做,也许类似的迭代器块产生的所有值:
public static IEnumerable<T> Reverse<T>(this LinkedList<T> list) {
var el = list.Last;
while (el != null) {
yield return el.Value;
el = el.Previous;
}
}
则:
foreach(var val in list.Reverse()) {
// use val
}
我认为值得注意的是'LinkedList'是'IEnumerable ',所以它会提取'IEnumerable 。如果您使用Linq,请使用()。这可能足以满足短名单。对于更长的列表,这个答案中的方法将更有效率。 –
@MthetheStrawbridge如果两者都可以通过'using'使用,哪一个优先?更具体的一个? –
@EugenDück是的,更具体的一个(即'LinkedList')将优先。但是*如果*您获得免费获得的'IEnumerable '版本的性能就足够了,那么您根本不需要实现另一个。 –