Почему мой список (из строки), созданный в цикле for, не пуст на каждой итерации? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть «главный» список (Of String), который содержит несколько сотен строк, которые необходимо разделить на n номеров меньшего List (Of String), причем каждый меньший список имеет одинаковую длину и затем передается в конструктор для объекта, который добавляется в собственный список. Для этого мой код выглядит так:

Private Function GetListOfClassA() as List(Of ClassA)
    Dim listToReturn As New List(Of ClassA)
    Dim sublistLength As Integer = 38
    Dim masterList as List(Of String) = StaticClass.GetCombinedClassAInfo()

    For index As Integer = 0 To (masterList.Count / sublistLength) - 1 'This will always divide evenly
        Dim startIndex As Integer = index * sublistLength 'I know there's a bit of miscalculation here but at this point I think it's beside point
        Dim endIndex As Integer = startIndex + sublistLength
        Dim tempList as List(Of String) = masterList.GetRange(startIndex, endIndex)
        Dim tempClassA As New ClassA(tempList)
        listToReturn.Add(tempClassA)
    Next

    Return listToReturn
End Function

Я ожидаю, что поведение tempList будет абсолютно новым на каждой итерации цикла, так что каждый созданный tempList будет иметь длину 38. Однако, когда я запускаю этот код, tempList равен 38, затем 76 и так далее. Значения 2-й итерации добавляются к tempList предыдущей итерации, которая затем используется для создания экземпляра tempClassA, и я понятия не имею, почему.

Я дважды проверил, что startIndex и endIndex рассчитываются правильно, и это так. На 2-й итерации startIndex = 38 и endIndex = 76

Любое понимание очень ценится.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

EndIndex неверен, потому что параметр запрашивает «count», а не конечный индекс:

С List.GetRange

публичный System.Collections.Generic.List GetRange (int index, int count);

Попробуйте это так:

Dim tempList as List(Of String) = masterList.GetRange(startIndex, sublistLength)
0 голосов
/ 30 октября 2018

Может быть, вы можете попробовать что-то вроде этого

    Dim tempList = New List(Of String) From masterList.GetRange(startIndex, endIndex)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...