Vb.net 使用「;对于每一个“;语句,从列表中的最后一个元素到第一个元素

Vb.net 使用「;对于每一个“;语句,从列表中的最后一个元素到第一个元素,vb.net,for-loop,foreach,Vb.net,For Loop,Foreach,当我想从列表中的最后一个元素迭代到第一个元素时,我通常会这样做: For i=list.Count-1 to 0 Step -1 'do something Next For Each item in list.Reverse() Next 我想知道是否有一种方法可以使用For-Each语句以这种方式遍历列表 谢谢 如果您不介意它造成的开销,您可以使用反向: list.reverse() for each listElement in list ' ... next 如果您的列表是

当我想从列表中的最后一个元素迭代到第一个元素时,我通常会这样做:

For i=list.Count-1 to 0 Step -1
    'do something
Next
For Each item in list.Reverse()
Next
我想知道是否有一种方法可以使用For-Each语句以这种方式遍历列表


谢谢

如果您不介意它造成的开销,您可以使用反向:

list.reverse()
for each listElement in list
' ...
next

如果您的列表是一个
list(Of T)
对象,您可以使用它的
Reverse
方法,例如:

list.Reverse()
For Each i In list
    'do something
Next
For Each i In list.As Enumerable().Reverse()
    'do something
Next
但是,这将改变列表中项目的实际顺序。如果您希望以相反的顺序获取项目,而不影响原始列表中的顺序,则可以使用LINQ中提供的
Reverse
扩展方法,例如:

list.Reverse()
For Each i In list
    'do something
Next
For Each i In list.As Enumerable().Reverse()
    'do something
Next
然而,最有效的方法是使用
步骤-1
,尽管这确实意味着需要更多的输入…

这可以通过使用。如果将
list
键入为
IEnumerable
,则可以这样调用它:

For i=list.Count-1 to 0 Step -1
    'do something
Next
For Each item in list.Reverse()
Next
但是,如果它是
ArrayList
List(Of T)
,则将调用修改列表的方法(并且不返回任何内容)。在这种情况下,您可以直接从
Enumerable
调用,或使用:

需要注意的是,此方法会将列表复制到数组中。如果需要节省内存,最好使用
For…to
方法。不过,您可以将其包装到自己的函数中:


这应该不容易实现,因为.NET使用列表迭代器对列表进行迭代。不过我不确定是否有可能改变迭代器的行为。呵呵,不错,但我认为它对代码的影响大于对代码的澄清。。。无论如何谢谢你!