Iterate through a VB6 Dictionary

2019-01-24 05:36发布

问题:

I'm a non-VB6 person who had the misfortune of inheriting a buggy legacy VB6/Classic ASP project. There's a section where a lot of entries are put into a Dictionary and I want to see all it contains. I tried this (oParams is a Dictionary):

Dim o As Object
Dim sDicTempAggr As String
sDicTempAggr = ""
For Each o In oParams
    sDicTempAggr = sDicTempAggr & ", " & o
Next

Which returned:

Object doesn't support this property or method : 438

Using Option Explicit, how do I iterate through a VB6 Dictionary to find out everything it contains?

回答1:

Here's a sample for iterating, if you still have a problem look at the second loop to inspect the types of the values in the dictionary

  Dim oParams As New Dictionary
    oParams.Add 1, "This"
    oParams.Add 2, "That"
    oParams.Add 3, "The other"
    Dim key As Variant
    Dim sDicTempAggr  As String
    Dim sTypes As String
    For Each key In oParams.Keys
        sDicTempAggr = sDicTempAggr & IIf(sDicTempAggr <> "", ",", "") & oParams(key)
    Next key
    For Each key In oParams.Keys
          sTypes = sTypes & IIf(sTypes <> "", ",", "") & TypeName(oParams(key))
    Next key


回答2:

An enumeration over a Dictionary isn't of type Object, you should use Variant instead:

Dim o As Variant
Dim sDicTempAggr As String
sDicTempAggr = ""

For Each o In oParams
    sDicTempAggr = sDicTempAggr & ", " & oParams(o)
Next

Also within the For Each the Key is returned not the dictionary member hence the oParams(o) for the value, if you change to For Each o In oParams.items you can use oParams directly.