2011-11-19 82 views

回答

16

作为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 
} 
+1

我认为值得注意的是'LinkedList '是'IEnumerable ',所以它会提取'IEnumerable 。如果您使用Linq,请使用()。这可能足以满足短名单。对于更长的列表,这个答案中的方法将更有效率。 –

+0

@MthetheStrawbridge如果两者都可以通过'using'使用,哪一个优先?更具体的一个? –

+0

@EugenDück是的,更具体的一个(即'LinkedList ')将优先。但是*如果*您获得免费获得的'IEnumerable '版本的性能就足够了,那么您根本不需要实现另一个。 –