У меня есть «главный» список (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
и так далее. Значения второй итерации добавляются к tempList
предыдущей итерации, которая затем используется для создания экземпляра tempClassA
, и я не знаю почему.
Я дважды проверил, правильно ли рассчитываются startIndex
и endIndex
, и это так. На 2-й итерации startIndex = 38
и endIndex = 76
Любое понимание очень ценится.
Может ты можешь попробовать что-то вроде этого
Dim tempList = New List(Of String) From masterList.GetRange(startIndex, endIndex)
Спасибо за сообщение, скоро попробую.
EndIndex неверен, потому что параметр запрашивает «количество», а не конечный индекс:
public System.Collections.Generic.List GetRange (int index, int count);
Попробуйте вот так:
Dim tempList as List(Of String) = masterList.GetRange(startIndex, sublistLength)
Ого, спасибо. Думаю, я просто предположил, что это конечный индекс!
Именно то, что я собирался опубликовать. Думаю, это может быть то, что вы ищете.