2017-01-26 10 views
0

У меня есть словарь объектов. Каждый объект является ошибкой. Когда я просматриваю ошибки в журнале, я добавляю объект в словарь, используя описание в качестве ключа. Если ключ уже существует, я хочу обновить счетчик. Здесь я испытываю проблемы; обновление счета.Обновить свойство объекта в словаре объектов?

Определение:

Class errClass 
    Dim errDesc, errType, hasPhr, errCount, lwCount, errPriority, edge 
End Class 

Dim errs: Set errs = CreateObject("Scripting.Dictionary") 

Население:

errDetails.errDesc = resultSet("eventtext") 
errDetails.errType = resultSet("eventtype") 
errDetails.edge = resultSet("namespace") 
errDetails.errPriority = 1 

If errs.Exists(errDetails.errDesc) Then 
    If dev Then WScript.Echo "Key exists, incrementing count" 
    errs.Item(errDetails.errDesc)("errCount") = errs.Item(errDetails.errDesc)("errCount") + 1 
Else 
    If dev Then WScript.Echo "Key does not exist, adding" 
    errs.Add errDetails.errDesc, errDetails 
End If 

Только выше, где происходит ошибка: errs.Item(errDetails.errDesc)("errCount") = errs.Item(errDetails.errDesc)("errCount") + 1

Microsoft VBScript runtime error: Object doesn't support this property or method: 'errs.Item(...)'

Что такое PR оперативный способ обновить свойство объекта в словаре?

+5

'errs.Item (errDetails.errDesc) («errCount») '->' errs.Item (errDetails.errDesc) .errCount' –

+0

Написал ответ, когда вы прокомментировали @AnsgarWiechers, извините за это. – Rich

ответ

1

Ansgar сделал это в комментариях, но вот образец кода.

Class errClass 
    Public errDesc, errType, hasPhr, errCount, lwCount, errPriority, edge 
End Class 

dim errDetails : set errdetails = new errClass 

Dim errs: Set errs = CreateObject("Scripting.Dictionary") 
dim dev: dev = true 
errDetails.errDesc = "test" 
errDetails.errType = "test" 
errDetails.edge = "test" 
errDetails.errPriority = 1 

errs.Add errDetails.errDesc, errDetails 

errs.Item(errDetails.errDesc).errCount = errs.Item(errDetails.errDesc).errCount + 100 

msgbox errs.Item(errDetails.errDesc).errCount 
0

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

Но, как объекты ссылки, вы словарю необходимо провести отдельные экземпляры и отсчет начинается с 1. Итак:

Class errClass 
    Dim errDesc, errCount 
    Public Sub show 
     WScript.Echo errDesc, errCount 
    End Sub 
End Class 

' dictionary of errClass objects 
Dim errs : Set errs = CreateObject("Scripting.Dictionary") 

Dim e 
For Each e In Split("stupid silly stupid") 
    If errs.Exists(e) Then 
     WScript.Echo "Key exists, incrementing count" 
     errs(e).errCount = errs(e).errCount + 1 
    Else 
     WScript.Echo "new Key, adding new object to dictionary" 
     Dim o : Set o = New errClass : o.errDesc = e : o.errCount = 1 
     errs.add e, o 
    End If 
Next 

For Each e In errs.Keys() 
    errs(e).show 
Next 

выход:

cscript 41878841.vbs 
new Key, adding new object to dictionary 
new Key, adding new object to dictionary 
Key exists, incrementing count 
stupid 2 
silly 1