2016-02-29 93 views
0

我已经设置了一个循环遍历列表的For Each语句。该列表由'像素'组成,这是一个自定义的图片框类。我需要设置一个以相反顺序遍历列表的循环。这是我的正常循环是什么样子:VB:通过列表向后循环

 For Each Tile As Pixel In PixelList 
      If Tile.PixelNumber = 1 Then 
       Tile.NewColour() 
      End If 
     Next 

PixelNumber仅仅是保持数,其中像素是一个整型变量。

像素是自定义图片框类

PixelList是列表

我需要能够建立一个类似的循环,而是一个通过时,我瓷砖是相反的顺序不胜枚举的名字添加。所以是第一个出现的情况。

+2

'对于i为整数= PixelList.Count - 1向0步骤-1'的 – LarsTech

+0

可能的复制[?可以通过一个foreach向后遍历](http://stackoverflow.com/questions/1211608/可能对迭代向后遍历一个foreach) – Icemanind

回答

2

вʀaᴎᴅᴏƞвєнᴎєƞ的方式是最有效的,但一个简单的替代方法是使用List(Of T).Reverse() function,虽然改变列表本身的顺序。

PixelList.Reverse() 
    For Each Tile As Pixel In PixelList 
     If Tile.PixelNumber = 1 Then 
      Tile.NewColour() 
     End If 
    Next 
+1

在List中使用'Reverse()'方法可行,但如前所述,如果问题出现,那么似乎会出现两个循环在同一个名单上;一个从上到下,另一个按相反的顺序进行。使用'Reverse()'方法在每次循环需要它时反转列表,然后跟踪列表在给定时刻处于哪个顺序将会增加大量的开销并且增加了不必要的复杂性。 –

1

按索引访问列表,该索引从集合中元素的数量开始并以1递减。

For i as Integer = PixelList.Count - 1 To 0 Step -1 
    If DirectCast(PixelList(i), Pixel).PixelNumber = 1 then DirectCast(PixelList(i), Pixel).NewColour() 
Next