VB.Collection Special Maps

    In VB6 the Collection class has a complex behavior which could be compared to a combination of the following .NET classes: HashTable, ArrayList, StringCollection and StringDictionary. Microsoft decided to implement an equivalent class in the Microsoft.VisualBasic library. The default behavior of VBUC is to convert Collection references to that support class.

    In some cases, though, the behavior of a particular collection is very consistent and could be identified as a special case of one of the .NET classes mentioned above.

    The “VB.Collection Special Maps” feature includes some heuristic transformations intended to recognize this particular patterns and generate .NET native classes to avoid the usage of Microsoft.VisualBasic.Collection as much as possible.

    The usage of this particular functionality will cause the output code to be more .NET like yet the resulting code behavior might not be completely functionally equivalent.

    The resulting .NET structure will be determined by the contents of the collection and how these contents are accessed. The following chart describes how the resulting structure will be selected.

    Element Type Accessed By Resulting Structure
    String Index StringCollection
    String Key value StringDictionary
    Other Index ArrayList
    Other Key Value HashTable

    Since this technique implicates a lot of small details and it might produce some different behavior, this feature is disabled by default, which means the resulting code would use the .NET collection (Microsoft.VisualBasic) compatibility class. This is a brief usage example:

    Original VB6 Code:

    Public Sub ArrayListDemo()
    'This method will generate an ArrayList class
    Dim collection1 As New Collection
    collection1.Add 10
    collection1.Add 9
    ...
    collection1.Add 2
    collection1.Add 1
    End Sub
    
    Public Sub HashTableDemo()
    'This method will generate a HashTable class
    Dim collection1 As New Collection
    collection1.Add 1, "first"
    collection1.Add 2, "second"
    ...
    collection1.Add 9, "ninth"
    collection1.Add 10, "tenth"
    End Sub
    
    Public Sub StringDictionaryDemo()
    'This method will generate a StringDictionary class
    Dim collection1 As New Collection
    collection1.Add "first", "one"
    collection1.Add "second", "two"
    ...
    collection1.Add "ninth", "nine"
    collection1.Add "tenth", "ten"
    End Sub
    
    Public Sub StringCollectionDemo()
    'This method will generate a StringCollection class
    Dim collection1 As New Collection
    collection1.Add "first"
    collection1.Add "second"
    ...
    collection1.Add "ninth"
    collection1.Add "tenth"
    End Sub

    Resulting VB.NET Code:

    Public Sub ArrayListDemo()
    'This method will generate an ArrayList class
    Dim collection1 As New ArrayList
    collection1.Add(10)
    collection1.Add(9)
    ...
    End Sub
    
    Public Sub HashTableDemo()
    'This method will generate a HashTable class
    Dim collection1 As New Hashtable
    collection1.Add("first", 1)
    collection1.Add("second", 2)
    ...
    End Sub
        
    Public Sub StringDictionaryDemo()
    'This method will generate a StringDictionary class
    Dim collection1 As New StringDictionary
    collection1.Add("one", "first")
    collection1.Add("two", "second")
    ...
    End Sub
        
    Public Sub StringCollectionDemo()
    'This method will generate a StringCollection class
    Dim collection1 As New StringCollection
    collection1.Add("first")
    collection1.Add("second")
    ...
    End Sub

    Resulting C#.NET Code:

    public void  ArrayListDemo(){
        //This method will generate an ArrayList class
        ArrayList collection1 = new ArrayList();
    collection1.Add(10)
    collection1.Add(9)
    ...
    }
    public void  HashTableDemo(){
        //This method will generate a HashTable class
        Hashtable collection1 = new Hashtable();
        collection1.Add("first", 1)
    collection1.Add("second", 2)
    ...
    }
    public void  StringDictionaryDemo(){
        //This method will generate a StringDictionary class
        StringDictionary collection1 = new StringDictionary();
    collection1.Add("one", "first")
    collection1.Add("two", "second")
    ...
    }
    public void  StringCollectionDemo(){
        //This method will generate a StringCollection class
    StringCollection collection1 = new StringCollection();
    collection1.Add("one", "first")
    collection1.Add("two", "second")
    ...
    }

    Download VBUC Free Trial
    Download VBUC Now

    It's time to eradicate VB6
    ROI of eradicating VB6

    8 Proven Tips for
    Planning a Successful Migration

    8 Tips for migration