I had a recursive function in c# that worked well. But when I converted it into VB.Net, it gives out of index error. Strange thing is that, when it is debugged in VB, the code goes to the 'End Sub' line and again goes into the recursive function call. Any idea why this happens?
It is a simple function to correct make ordered age groups from a list of groups. See the code below.
The final expected groups are 0-10, 30-60 and 75-90.
Public Class AgeGroup
Public Lower As Integer
Public Higher As Integer
End Class
Public Class RngTest
Public Sub MakeUniqueRanges(ByVal ranges As List(Of AgeGroup))
For i As Integer = 0 To ranges.Count - 2
Dim first As AgeGroup = ranges(i)
Dim second As AgeGroup = ranges(i + 1)
If first.Higher > second.Lower Then
'range is mixed..construct a new range by mixing the two ranges
Dim newRange As New AgeGroup()
newRange.Lower = first.Lower
newRange.Higher = second.Higher
'delete the existing 2 ranges
ranges.RemoveAt(i)
ranges.RemoveAt(i)
ranges.Insert(i, newRange)
MakeUniqueRanges(ranges)
End If
Next
End Sub
End Class
Module RngModule
Sub Main()
Dim ranges As New List(Of AgeGroup)()
ranges.Add(New AgeGroup() With {.Lower = 0, .Higher = 10})
ranges.Add(New AgeGroup() With {.Lower = 30, .Higher = 40})
ranges.Add(New AgeGroup() With {.Lower = 35, .Higher = 50})
ranges.Add(New AgeGroup() With {.Lower = 45, .Higher = 60})
ranges.Add(New AgeGroup() With {.Lower = 75, .Higher = 90})
Dim test As New RngTest()
test.MakeUniqueRanges(ranges)
Console.ReadLine()
End Sub
End Module
this is the c# method that works well
static void MakeUniqueRanges(List<AgeGroup> ranges)
{
for (int i = 0; i < ranges.Count - 1; i++)
{
AgeGroup first = ranges[i];
AgeGroup second = ranges[i + 1];
if (first.Higher > second.Lower)
{
//range is mixed..
AgeGroup newRange = new AgeGroup();
newRange.Lower = first.Lower;
newRange.Higher = second.Higher;
ranges.RemoveAt(i);
ranges.RemoveAt(i);
ranges.Insert(i, newRange);
MakeUniqueRanges(ranges);
}
}
}
no error != working as intended