Использование классов в словаре в классическом ASP - PullRequest
2 голосов
/ 13 ноября 2009

Я обычно делаю C #, но унаследовал классический ASP-проект.

Я определил класс:

    Class clsPayment    
        Public Name
    End Class

Set objPayment = New clsPayment
objPayment.Name = "StackOverflow payment"    

И словарь:

Set colPayments = CreateObject("Scripting.Dictionary")
colPayments.Add 1, objPayment 

При чтении объектов позже я не могу вызвать открытое поле:

For i = 0 to colPayments.Count - 1
    objPayment = colPayments.Item(i)
    Response.Write(objPayment.Name)
Next    

Это приводит к ошибке в строке Response.Write:

Ошибка времени выполнения Microsoft VBScript '800a01a8'

Требуемый объект: ''

Что я сделал не так?

1 Ответ

6 голосов
/ 13 ноября 2009

Измените цикл for на это: -

For Each key in colPayments
    Set objPayment = colPayments(key)
    Response.Write objPayment.Name
Next

Есть несколько вещей, на которые нужно обратить внимание.

Используйте Set для назначения объекта . В VBScript необходимо использовать ключевое слово Set, как указано выше, при назначении объекта переменной.

Словарь на самом деле не является коллекцией Похоже, вы пытались использовать словарь в качестве порядкового набора, это не так. Словарь сценариев является строго ассоциативным массивом и не имеет надежного порядка. В отличие от .NET Dictionary For Each для объекта возвращает перечисление только используемых ключей, а не пары KeyValue.

Избегайте использования скобок при использовании оператора процедуры Обратите внимание, что при вызове Response.Write отсутствуют пропущенные паратезы. Хотя вы часто будете видеть, что они успешно используются, когда есть только один параметр (его интерпретируется как выражение), это будет синтаксической ошибкой, когда потребуется 2 или более параметров.

...