Как использовать объекты в словарях в VBScript? - PullRequest
0 голосов
/ 12 марта 2019

Я создал простой класс, GaugeChart:

Class GaugeChart 
    Public Essential
    Public Lifestyle
    Public Spending
    Public Average
End Class

Что я хочу использовать внутри словаря:

   Dim items, objGaugeDic, objGaugeChart, objGaugeChartread
    Set objGaugeDic = CreateObject("Scripting.Dictionary")

    Set objGaugeChart = New GaugeChart  ' from GaugeChartClass.asp
    objGaugeChart.Essential = intChart1Essential
    objGaugeChart.Lifestyle = intChart1Lifestyle
    objGaugeChart.Spending = intChart1Spending
    objGaugeChart.Average = Chart1Avg
    Set objGaugeDic ("Goal1") = objGaugeChart 
    Response.Write("Essential: " + Cstr(objGaugeChart.Essential) + "<br />")


    Set objGaugeChart = New GaugeChart  ' from GaugeChartClass.asp
    objGaugeChart.Essential = intChart2Essential
    objGaugeChart.Lifestyle = intChart2Lifestyle
    objGaugeChart.Spending = intChart2Spending
    objGaugeChart.Average = Chart2Avg
    Set objGaugeDic ("Goal2") = objGaugeChart 


    ' load values
    'objGuageDic.Add "Goal1", objGaugeElements
    Response.Write("objGaugeDic Keys: " + Cstr(objGaugeDic.Count))

    For i = 0 To objGaugeDic.Count -1 'Iterate the array
        Response.Write( CType(objGaugeDic.Item(i),objGaugeChart).Essential + "<br />")

    Next

словарь ключей = 2 - так что все в порядке. Однако, когда я пытаюсь получить доступ к объекту и свойствам в словаре, используя CType, я получаю ошибку времени выполнения.

Попытка с objGaugeDic.Item(i).Essential Я получаю неопределенное.

Я также попытался вместо Set objGaugeDic ("Goal1") = objGaugeChart, to do objGaugeDic.Добавить "Goal1", objGaugeChart`.

Как я могу получить доступ к свойствам каждого элемента словаря типа objGaugeDic, что-то вроде Response.Write( CType(objGaugeDic.Item(i),objGaugeChart).Essential + "<br />")?

1 Ответ

0 голосов
/ 12 марта 2019

Вы можете обращаться к объектам в словаре по ключам в цикле For Each:

For Each strKey In objGaugeDic
    Response.Write(objGaugeDic(strKey).Essential + "<br />")
Next

Кроме того, вы можете получить массив ключей вне цикла и ссылаться на объекты в словаре через ключи по индексу:

arrKeys = objGaugeDic.Keys()
For i = 0 To objGaugeDic.Count -1
    Response.Write(objGaugeDic(arrKeys(i)).Essential + "<br />")
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...