Можно ли сделать For ... Каждая петля в обратном направлении? - PullRequest
34 голосов
/ 04 июня 2009

Я не верю, что это возможно обычными методами, но что-то вроде этого подробного кода:

For Each s As String In myStringList Step -1
    //' Do stuff here
Next

Мне, вероятно, придется инвертировать объект myString перед обычным циклом For..Each, правильно?

Ответы [ 13 ]

0 голосов
/ 20 октября 2015

Вы можете добавить расширенную функцию к классу, который вы пытаетесь изменить

<Serializable()> Public Class SomeCollection
    Inherits CollectionBase
    Public Sub New()
    End Sub

    Public Sub Add(ByVal Value As Something)
        Me.List.Add(Value)
    End Sub

    Public Sub Remove(ByVal Value As Something)
        Me.List.Remove(Value)
    End Sub

    Public Function Contains(ByVal Value As Something) As Boolean
        Return Me.List.Contains(Value)
    End Function

    Public Function Item(ByVal Index As Integer) As Something
        Return DirectCast(Me.List.Item(Index), Something)
    End Function

    Public Function Reverse() As SomeCollection
        Dim revList As SomeCollection = New SomeCollection()
        For index As Integer = (Me.List.Count - 1) To 0 Step -1
             revList.List.Add(Me.List.Item(index))
        Next
        Return revList
    End Function
End Class

Тогда вы бы назвали это так

For Each s As Something In SomeCollection.Reverse

Next
0 голосов
/ 30 августа 2014

В зависимости от того, что происходит внутри вашего цикла, вы можете сделать .InsertAt (object, 0) вместо .Add и получить тот же результат, что и обратное перечисление.

0 голосов
/ 06 февраля 2014

То, что вам нужно сделать, это создать массив с вашим для каждого, что у вас было раньше, затем использовать array.reverse и запустить для каждого в массиве. Готово

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...